بالنسبة للمخرجات , فهو سيقوم بإعطائك حساب الـ 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);
}
اتمنى اني وفقت بالإجابة على سؤالك,