0

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

前两个元素设置为 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;
}
4

5 回答 5

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

你只涉及iand i-1,斐波那契公式涉及三个连续的指数。

顺便说一句,这个:

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

是可怕的海事组织。请把它分成两行。

int fib_numbers[40] = {1, 1};
int i;
于 2011-03-27T16:53:19.913 回答
2

在第一步之后,erray 元素为 0(未初始化,但在本例中为 0)。那么 fib[i+1] = fib[i]+fib[i-1]; printf ("%d\n",fib[i+1])? 当然 fib 的大小必须是 41 而不是 40。

于 2011-03-27T16:53:34.473 回答
2

查看这行代码的左侧

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

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

于 2011-03-27T16:56:28.560 回答
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]);
            }
于 2011-03-27T16:57:07.217 回答
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 个元素。当 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 );
}
于 2011-03-27T17:15:00.063 回答