[英]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 == 13
, first == 5
和second == 8
。 然后first
變為8, second
變為13。但是,此刻next
仍然是13,因此當它返回循環時, n >= next
仍然返回true
,它將繼續執行一個循環,因此輸出比你期望的。 我不會告訴您如何更改它,因為其他人說的是作業。 我只想向您展示如何找到問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.