public static int Febo(int n){
if (n<=2){
return n; // (當項數為 1,2 時直接回傳)
}
else {
return Febo(n-1)+Febo(n-2); //其餘以遞迴方式呼叫原本的函數運算出前兩項的值的和
}
}
public static void main (String args[]){
int n;
for (n=1;n<=10;n++){ // 以For loop 迴圈算出費氏數列前十項值
System.out.printf("第 %1$2d 項數值為%2$s %3$2d%n", n,"",Febo(n));
}
float goldenRatio=(float)Febo(10)/Febo(9); //計算黃金分割比例,
//(float) 掛在 Febo(10) 前
//,稱之為 cast 嵌入,目的是將運
//算結果以浮點運算呈現,否則兩個
//整數相除會變成整數
System.out.printf("黃金分割比例: "+"%.3f%n",goldenRatio);
}
}
該如何修改?? 煩請大大 列出修改得程式 感謝!!
這段程式碼是實現費氏數列的遞迴函數,並計算出前十項的值,並計算出黃金分割比例。若要修改這段程式碼,可以改變的地方包括:
修改費氏數列的遞迴函數 Febo(),如改變函數的計算方式,或加入新的條件判斷。
修改迴圈的條件,例如改變費氏數列計算的項數,或改變迴圈的執行次數。
修改輸出格式,例如改變輸出的順序,或改變輸出的排版方式。
例如,如果要改變迴圈的條件,可以將迴圈改為計算前 20 項的值,並修改輸出格式,顯示每一項的值。修改後的程式碼如下:
public static int Febo(int n) {
if (n <= 2) {
return n; // (當項數為 1,2 時直接回傳)
} else {
return Febo(n - 1) + Febo(n - 2); //其餘以遞迴方式呼叫原本的函數運算出前兩項的值的和
}
}
public static void main(String args[]) {
int n;
for (n = 1; n <= 20; n++) { // 以For loop 迴圈算出費氏數列前二十項值
System.out.println("第 " + n + " 項數值為: " + Febo(n));
}
float goldenRatio = (float) Febo(20) / Febo(19); //計算黃金分割比例,
//(float) 掛在 Febo(20) 前
//,稱之為 cast 嵌入,目的是將運
//算結果以浮點運算呈現,否則兩個
//整數相除會變成整數
System.out.printf("黃金分割比例: " + "%.3f%n", goldenRatio);
}
此外,如果要將費氏數列的遞迴函數 Febo() 改為非遞迴的寫法,可以使用迴圈來計算每一項的值。修改後的程式碼如下:
public static int Febo(int n) {
if (n <= 2) {
return n; // (當項數為 1,2 時直接回傳)
} else {
int f1 = 1;
int f2 = 1;
int fn = 0;
for (int i = 3; i <= n; i++) {
fn = f1 + f2;
f1 = f2;
f2 = fn;
}
return fn;
}
}
public static void main(String args[]) {
int n;
for (n = 1; n <= 20; n++) { // 以For loop 迴圈算出費氏數列前二十項值
System.out.println("第 " + n + " 項數值為: " + Febo(n));
}
float goldenRatio = (float) Febo(20) / Febo(19); //計算黃金分割比例,
//(float) 掛在 Febo(20) 前
//,稱之為 cast 嵌入,目的是將運
//算結果以浮點運算呈現,否則兩個
//整數相除會變成整數
System.out.printf("黃金分割比例: " + "%.3f%n", goldenRatio);
}
這裡只是為了示範,實際修改時還需要考慮具體需求,並確認修改後的程式碼是否正確可行。
若您需要其他幫助,請再提出您的疑問。
只要改Febo就好了
public static int Febo(int n){
if (n<=2){
return 1; // 只要改這行
} else {
return Febo(n-1)+Febo(n-2);
}
}