• 0

ممكن حد يساعدني بتتبع الكود واخراج ال output

 public static double power(double x, int n) {//method power 
        if (n == 0) {
            return 1;
        } else {
            return x * power(x, n - 1);
        }

    }
//method fact number 
    public static int factorial(int n) {
        if (n == 0) {
            return 1;
        } else {
            return n * factorial(n - 1);
        }
    }

    public static double myexp(double x, int n) {
        if (n == 0) {
            return 1;
        } else {
            return (power(x, n) / factorial(n)) + myexp(x, n - 1);
        }
    }
//main 
    public static void main(String[] args) {
        int n = 10;
        double x = 1;
        System.out.println(myexp(x, n)); // unfortunately, increasing n value
                                            // makes it go infinite.
    }}

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

بالنسبة للمخرجات , فهو سيقوم بإعطائك حساب الـ Exponential function بحسب الـ base و exponent التي تقومين بتغذيتها به وهذا في علم الرياضيات. 

لربما صعوبة تتبع الكود تكمن في الـ Recursion وذلك لقلة استخدام هذه الطريقة عند المبرمجين. 

الـ Recursion ببساطة الأمر هي تعادل loops ولكنها مخصصة للميثودز في الجافا. فيقوم الميثود بمناداة نفسه وإعادة تغذية ال arguments بالقيم الجديدة في كل مره. حتى يتم استيفاء الشرط المحدد ويقوم بإعطاء النتيجة النهائية في حال الإنتهاء. تماماً كما هو العمل مع loops.. 

مقارنة بسيطة لو اخذنا ميثود الـ power على سبيل المثال : 

 public static double power(double x, int n) {
        if (n == 0) {
            return 1;
        } else {
            return x * power(x, n - 1);
        }
    }

هذه بطريقة الـ Recursion , والآن سنقوم بتحويلها الى Loop بهذه الطريقة  : 

for(int i = 1; i <= n; i++)
  power = n * power;

 

لو قمنا بإعطاء القيمة 4 الى n و 1 الى x سيكون الناتج 4 للطرفين .

كذلك هو الحال مع بقية الميثودز , عند تحويلها الى Loops سيكون من السهل ايضاً تتبع المخرجات .. 

قمت بتحويل  الـ Recursion الى Loops حتى تكون اسهل بالتتبع لمن هم لم يعتادوا على الـ Recursion .. :  

 

    public static void main(String[] args) {
        double base = 4; // base = n
        double factorial = 1;        
        double power = 1; 
        double expoFun = 1;
        double powerFn = 1; 
        double factFn = 1;
		
         // Factorial - same as factorial(n) method
         for(int i = 1; i <= base; i++)
            factorial = factorial * i; 
			 
         // Power  - same as power(x,n) method
        for(int i = 1; i <= base; i++)
            power = base * power;
                
         // Exponential function - same as myexp(x,n) method
         for(int i = 1; i <= base; i++) {
             powerFn = powerFn * base; 
             factFn = factFn * i;
             expoFun = (powerFn / factFn) + expoFun;   
         
         }
		 

		System.out.println("Factorial = " + factorial);
		System.out.println("Power = " + power);
		System.out.println("Exponential function = " + expoFun); 		
		 
		 
		 
    }

 

اتمنى اني وفقت بالإجابة على سؤالك,

تمّ تعديل بواسطة محمد المري2
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن