求階乘使用遞歸很好解決。
而求階乘和,譬如1!+2!+3!+...(n-1)+n!=使用兩層循環也很容易解決,但用遞歸可能就有點難度。
我藉助Java的靜態變量,不使用循環一個遞歸就能解決。
代碼如下:
public class JieChengSum {
/**
* 遞歸求和1!+2!+3!...+(n-1)!+n!=最終結果
*/
public static long result = 0;
public static void main(String[] args) {
int n= 4;
calJieCheng(n);
System.out.println("階乘和爲 " +result);
}
/**
* 遞歸求和1!+2!+3!...+(n-1)!+n!=
* @param n
*/
public static long calJieCheng(int n) {
if (n == 1) {
result += 1;
return 1;
}
else {
result += calJieCheng(n-1) * n;
return calJieCheng(n-1) * n;
}
}
}
如果求1!+3!+5!+...+(2n-1)!=也使用遞歸,可以在上面的代碼進行改造如下:
main()方法:
int n= 4;
calJieCheng(2*n-1); // 轉換爲求階乘1!+2!+3!+...+(2n-1)!=
System.out.println("階乘和爲 " +result);
calJieCheng(int m): // 參數名改爲m,是因爲他其實是2*n-1轉換來的
if (m == 1) {
result += 1;
return 1;
}
else {
if (m%2==1) { // 遇到奇數時才疊加
result += calJieCheng(m-1) * m;
}
return calJieCheng(m-1) * m;
}
代碼比較好理解,主要是藉助Java的靜態變量來求和,這個思路大家可能沒想到。