簡體   English   中英

C fibonacci實現中的循環終止

[英]Loop termination in C fibonacci implementation

我的任務是找到不大於輸入中給出的斐波那契數列元素。 問題是我得到了一個額外的結果(輸入中的數字大於該數字)。

例如:當我最多輸入15時,我得到1,1,2,3,5,8,13,21這是不正確的。

我的代碼:

#include <stdio.h>


int main()
{
    int n, first = 0, second = 1, next =0, c;

    printf("Enter max value\n");
    scanf("%d",&n);

    printf("Values smaller than %d  :-\n",n);

    for ( c = 1 ; n>=next; c++)
    {
        if ( c <= 1 )
           next = c;
        else
        {
            next = first + second;
            first = second;
            second = next;
        }
        printf("%d\n",next);
    }  
    return 0;
}

有任何想法嗎?

您應該檢查新元素是否變大,而不是最后找到的元素變小。
我不再贅述,因為您說的是家庭作業,可能不需要更多。

如果獲得的值高於最大值,則是因為先進行此測試: n>=next (在for內)然后

next = first + second;

這意味着上次迭代的next>=n將為true。 您應該更改極限測試或在打印結果時更改(例如,在next = first + second;

問題出在最后一個循環上。 如果需要,請與調試器一起使用; 或者您可以一步步走在腦海中。 在您的情況下,當next == 13first == 5second == 8 然后first變為8, second變為13。但是,此刻next仍然是13,因此當它返回循環時, n >= next仍然返回true ,它將繼續執行一個循環,因此輸出比你期望的。 我不會告訴您如何更改它,因為其他人說的是作業。 我只想向您展示如何找到問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM