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

خطا فى دالة ال Recursion

بدأه mr.beshoy في 11 يناير 2010 · 2 رد · 518 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام للجميع

---------

كنت بجرب اكتب كود ال factorial باستعمال دالة ال recursion

و لكن كنت أجرب كتابة جملة ال if ..else فى سطر واحد

و فى مشااكل بسببها

----------------------------

الخطا الى بيظهر StackOverFlow :ohmy:

الكود

-------

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class RecursiveTest {

    private static BufferedReader bufferedReader;
    private static String str;
    private static char ch;

    public static void main(String[] args) {
        System.out.println("Enter number:");
        bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        try {
            do {
                str = bufferedReader.readLine();
                int result = factorial(Integer.parseInt(str));
                System.out.println(result);
                System.out.println(" Do you want to test anthor? 'YES' or 'NO' ");
                ch = bufferedReader.readLine().charAt(0);
            } while (ch == 'y');
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static int factorial(int fact) {
        int result;
        int f = 0;
        result = (fact == 0 || fact == 1) ? 1 : f;
        result = fact * factorial(fact - 1);
        return result;
    }
}

شكراً

#2

تم تعديل الكود ز التخلص من ال StackOverFlow

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class RecursiveTest {

    private static BufferedReader bufferedReader;
    private static String str;
    private static char ch;

    public static void main(String[] args) {
        do {
            System.out.println("Enter number:");
            bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            try {
                str = bufferedReader.readLine();
                int result = factorial(Integer.parseInt(str));
                System.out.println(result);
                System.out.println(" Do you want to test anthor? 'YES' or 'NO' ");
                ch = bufferedReader.readLine().charAt(0);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } while (ch == 'y');
    }

    private static int factorial(int fact) {
        int result;
        result = (fact == 0 || fact == 1) ? 1 : fact * factorial(fact - 1);
        return result;
    }
}

لكن مش مستوعب بالضبط سببه فى المرة الاولى .

فاهم بس فهم ملغبط شوية ... إن أمكن التوضيح مشكوراً لذلك

شكراً

#3

لاحظ معي ما الذي سيحصل هنا

        result = (fact == 0 || fact == 1) ? 1 : f;
        result = fact * factorial(fact - 1);

لاحظ معي أنه في كل مرة سيدخل الدالة سيصل إلى عند عملية النداء للدالة factorial في الجملة الثانية

ثم يرجع من أول الدالة

ولا يوجد ما يمنعه من ذلك

لذا سيدخل في تكرار غير منتهي infinite loop

تحياتي

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

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

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

728x90.png

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