اذهب إلى المحتوى

السؤال

نشر
 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.
    }}

 

Recommended Posts

  • 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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...