我如何正确地使这个循环显示斐波纳契序列的前40位?

时间:2011-03-27 16:48:58

标签: c arrays fibonacci

据我所知,这看起来应该可行。

前两个元素设置为1(我忽略第一个0)。 for循环应该循环遍历数组,因为斐波纳契数等于前两个数的总和,我想添加它们,然后显示它们。

输出全是2s,我不太清楚为什么。

注意:我不是直接寻找答案,而是我可以自己解决这个问题的方法。

//Fibonacci sequence
#include <stdio.h>

int main(void) {
        int fib_numbers[40] = {1, 1}, i;


        for(i = 1; i < 40; i++) {
                fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
                printf("\t%d\n", fib_numbers[i]);
            }

        return 0;
}

5 个答案:

答案 0 :(得分:2)

fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];

您只涉及ii-1,斐波纳契公式涉及三个连续索引。

顺便说一下,这个:

int fib_numbers[40] = {1, 1}, i;

是可怕的IMO。请把它分成两行。

int fib_numbers[40] = {1, 1};
int i;

答案 1 :(得分:2)

在第一步之后,erray元素为0(未初始化,但在这种情况下为0)。关于什么 fib [i + 1] = fib [i] + fib [i-1]; printf(“%d \ n”,fib [i + 1])? 当然,fib必须大小为41而不是40。

答案 2 :(得分:2)

查看此代码行的左侧

fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];

并考虑数组中存储值的位置。

答案 3 :(得分:0)

更新代码如下:

for(i = 2; i < 40; i++) {
                fib_numbers[i] = fib_numbers[i-1] + fib_numbers[i - 2];
                printf("\t%d\n", fib_numbers[i]);
            }

答案 4 :(得分:0)

我猜你的循环错了

  for(i = 1; i < 40; i++) {
       fib_numbers[i] = fib_numbers[i] + fib_numbers[i - 1];
       printf("\t%d\n", fib_numbers[i]);
  }

你通过覆盖自己来分配我的元素。当i大于1时,第i个元素的值为null。

可能你应该这样做

//Fibonacci sequence
#include <stdio.h>

int main(void) {
    int fib_numbers[40] = {1, 1};

    for(int i = 2; i < 40; i++) {
        fib_numbers[i] = fib_numbers[i - 1] + fib_numbers[i - 2];
        printf("\t%d\n", fib_numbers[i]);
    }

    return 0;
}

但我建议使用递归来查找斐波那契。

//Fibonacci sequence
#include <stdio.h>

int main void() {

   int fib_numbers[40] = {1, 1};

   for(int i = 2 ; i < 40 ; i++) {
        fib_numbers[i] = fibonacci(i);
        printf("\t%d\n", fib_numbers[i]);
   }
   return 0;
}

int fibonacci(int a) {
     if (a <= 1) return 1;
     return fibonacci( a - 1 ) + fibonacci( a - 2 );
}