我的任务是找到不大于输入中给出的斐波纳契系列元素。问题是我得到了一个额外的结果(比输入的数字大)。
例如:当我输入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;
}
有什么想法吗?
答案 0 :(得分:3)
您应该检查新元素是否为big,而不是最后找到的较小元素 我不会详细介绍,因为你说它是功课,可能不需要更多。
答案 1 :(得分:0)
如果您获得的值高于最大值,因为您首先执行此测试:
n>=next
(在for中)
THEN
next = first + second;
最后一次迭代的平均值next>=n
将为真。
您应该更改极限测试或打印结果(例如在next = first + second;
之前)
答案 2 :(得分:0)
问题在于你的上一次循环。如果需要,可以使用调试器;或者你可以一步一步地走在你的脑海里。在您的情况下,next == 13
,first == 5
和second == 8
时。然后first
变为8,second
变为13.但是,此时next
仍然是13,所以当它返回循环时,n >= next
仍会返回{{1}它将继续循环,因此比你预期的多一个输出。我不会告诉你如何改变它,因为其他人说,这是家庭作业。我只是想告诉你如何找到问题。