藉助Java靜態變量,遞歸求階乘和代碼分享

求階乘使用遞歸很好解決。

而求階乘和,譬如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的靜態變量來求和,這個思路大家可能沒想到。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章