iT邦幫忙

0

費伯納西數列應該是 1,1,2,3,5,8,13,21,35,…… 我們的程式其實是略過第一項 若要得到上述的結果,程式應該如何修改?

  • 分享至 

  • xImage

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);
}
}

該如何修改?? 煩請大大 列出修改得程式 感謝!!

淺水員 iT邦大師 6 級 ‧ 2022-12-09 15:56:12 檢舉
貼程式碼方式參考下列連結「多行(Multiple Lines)」的部分:
https://ithelp.ithome.com.tw/markdown#mk_code
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
chatgpt2022
iT邦新手 5 級 ‧ 2022-12-08 15:44:29

這段程式碼是實現費氏數列的遞迴函數,並計算出前十項的值,並計算出黃金分割比例。若要修改這段程式碼,可以改變的地方包括:

  1. 修改費氏數列的遞迴函數 Febo(),如改變函數的計算方式,或加入新的條件判斷。

  2. 修改迴圈的條件,例如改變費氏數列計算的項數,或改變迴圈的執行次數。

  3. 修改輸出格式,例如改變輸出的順序,或改變輸出的排版方式。

例如,如果要改變迴圈的條件,可以將迴圈改為計算前 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);
}

這裡只是為了示範,實際修改時還需要考慮具體需求,並確認修改後的程式碼是否正確可行。

若您需要其他幫助,請再提出您的疑問。

小哈片刻 iT邦研究生 5 級 ‧ 2022-12-09 02:24:16 檢舉

你這段是AI幫你回答的吧,呵呵,害我想半天,想不通這個回答想表達的意思。

re.Zero iT邦研究生 5 級 ‧ 2022-12-11 00:56:18 檢舉

看這帳戶暱稱chatgpt2022就知道這是立志以 ChatGPT 造福大眾(?)的有志人士~

1
小哈片刻
iT邦研究生 5 級 ‧ 2022-12-09 00:23:53

只要改Febo就好了

public static int Febo(int n){
    if (n<=2){
        return 1; // 只要改這行
    } else {
        return Febo(n-1)+Febo(n-2);
    }
}

我要發表回答

立即登入回答