C fibonacci实现中的循环终止

时间:2014-04-15 21:04:17

标签: c fibonacci

我的任务是找到不大于输入中给出的斐波纳契系列元素。问题是我得到了一个额外的结果(比输入的数字大)。

例如:当我输入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;
}

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您应该检查新元素是否为big,而不是最后找到的较小元素 我不会详细介绍,因为你说它是功课,可能不需要更多。

答案 1 :(得分:0)

如果您获得的值高于最大值,因为您首先执行此测试: n>=next(在for中) THEN

next = first + second;

最后一次迭代的平均值next>=n将为真。 您应该更改极限测试或打印结果(例如在next = first + second;之前)

答案 2 :(得分:0)

问题在于你的上一次循环。如果需要,可以使用调试器;或者你可以一步一步地走在你的脑海里。在您的情况下,next == 13first == 5second == 8时。然后first变为8,second变为13.但是,此时next仍然是13,所以当它返回循环时,n >= next仍会返回{{1}它将继续循环,因此比你预期的多一个输出。我不会告诉你如何改变它,因为其他人说,这是家庭作业。我只是想告诉你如何找到问题。