الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[تنبيه - عنوان غير مناسب : ]Recursion .....factorial ....

بدأه يا ورد مين علمك تجرح في 19 نوفمبر 2010 · 7 رد · 544 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخوتي الكرام في منتدى الفريق العربي

عند تطبيق هذا الكود لايجاد مضروب العدد يظهر استتناء نوعه StackOverflowError

ما هذا الاستثناء ؟؟؟ كيف يمكن التعامل معه

هذا هو الكود

import java.io.*;

public class FactorialMain
{
	public static void main (String[ ] args)
	{
		final int MAX = 20; // because 21! > Long.MAX_VALUE

		final int SENTINEL = -1;

		final String PROMPT = "\nPlease enter a non-negative integer (at most " +
					    MAX + "), or " + SENTINEL + " to quit: ";

		final String ERROR = "Error: the input must be a non-negative integer or " + SENTINEL;

		final String MESSAGE = " factorial is ";

		BufferedReader reader = new BufferedReader (new InputStreamReader (System.in));

		int n;

		while (true)
		{
			try
			{
				System.out.print (PROMPT);
				n = Integer.parseInt (reader.readLine());
				if (n == SENTINEL)
					break;
				if (n > MAX)
					throw new IllegalArgumentException();				
				System.out.println (n + MESSAGE + factorial (n));
			} // try
			catch (Exception e)
			{
				System.out.println (e);
			} // catch

		} // while		
	} // method main

	/**
	 * Calculates the factorial of a non-negative integer, that is, the product of all
	 *  integers between 1 and the given integer, inclusive.  The worstTime(n) is O(n), 
	 *  where n is the given integer.	 
	 *
	 *  @param n the non-negative integer whose factorial is calculated.
	 *
	 *  @return the factorial of n
	 *
	 *  @throws IllegalArgumentException if n is less than 0.
	 *
	 */
	public static long factorial (int n) 
	{
	       	if (n < 0)
        	      	throw new IllegalArgumentException( ); 
       		if (n <= 1)
              		return 1; 
       		return factorial (n+1)/(n+1);
	} // method factori

} // class FactorialMain

الخطا في هذا الجزء

	return  factorial(n+1)/(n+1);

كيف ممكن تصحيحه انا حاولت

اني اضع مكانه

	public static long factorial (int n) 
	{
	       	if (n < 0)
        	      	throw new IllegalArgumentException( ); 
       		if (n <= 1)
              		return 1; 
       		return n*factorial(n-1)* factorial((n+1)/(n+1));
	} // method factori

لكن لم تضيظ ل مضروب 2

...ممكن مساعده اعرف وين الخطا في المتود

public static long factorial (int n) 
	{
	       	if (n < 0)
        	      	throw new IllegalArgumentException( ); 
       		if (n <= 1)
              		return 1; 
       	return	 factorial(n+1)/(n+1);
	} // method factori

تم تعديل هذه المشاركة بواسطة يا ورد مين علمك تجرح في 19 نوفمبر 2010 في 18:42

#2
يا ورد مين علمك تجرح كتب:

الخطا في هذا الجزء

	return  factorial(n+1)/(n+1);

الخطأ فى ارجاع الداله .

التعديل : اجعلى داله الفكتوريال تعود ب هذا

return n * factorial(n-1);

وبالتوفيق

تم تعديل هذه المشاركة بواسطة The expendable في 19 نوفمبر 2010 في 18:51

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#3

شكرا الك The expendable

انا بعرفها الداله

  return n * factorial(n-1);

موجوده في كتاب الداتا ستركشر

بس هذا سؤال بالكتاب مطلوب نوجد الخطأ في المتود

	public static long factorial (int n) 
	{
	       	if (n < 0)
        	      	throw new IllegalArgumentException( ); 
       		if (n <= 1)
              		return 1; 
       		return factorial (n+ 1)/)(n+1);
	} // method factorial

شكرا جزيلا :)

تم تعديل هذه المشاركة بواسطة يا ورد مين علمك تجرح في 19 نوفمبر 2010 في 20:01

#4

موجوده في كتاب الداتا ستركشر

بس هذا سؤال بالكتاب مطلوب نوجد الخطأ في المتود

	public static long factorial (int n) 
	{
           	if (n < 0)
              		throw new IllegalArgumentException( ); 
   			if (n <= 1)
              		return 1; 
   			return factorial (n+ 1)/)(n+1);
	} // method factorial

شكرا جزيلا :)

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#5

يعنى ايه المطلوب من السوال ؟؟

وهل تمت الاجابه عليه ام لا ؟

Software Developer
Mahmoudkelany.com


 

#6

اسم كتاب Data Structures and the Java Collections Framework, 2/e

السؤال بالكتاب

كاتب الكود والمطلوب نوجد الخطأ

انا فهمت الخطأ بالكود

انا اسفه The expendable قصدي انو الداله

return n * factorial(n-1);

موجوده بالكتاب

شكرا

#7

لا عليك .. المهم الفائده

no-pain-no-gain.jpg

اذا كنت لا تعلم الى اين تذهب... فكــل الطرق تؤدى الى هناك

#8

الأخ الكريم/الأخت الكريمة

السلام عليكم ورحمة الله وبركاته

مرحباً بكم في منتدى الفريق العربي للبرمجة

نود تنبيهك أن العنوان غير مناسب.

الرجاء اختيار عنوان مناسب أكثر في مواضيعك القادمة، وهذا بمثابة إشعار للأهمية.

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة