4
int * fibonacci(int n) {
    int range = n + 1;
    int * arr = malloc(range * sizeof(int));
    arr(0) = 0;
    arr(1) = 1;
    for(int i = 2; i < range; ++i) {
        arr(i) = arr(0) + arr(1);   
    }
    return arr;
}

我似乎无法确定我的程序出了什么问题,输出一直显示为 0、1、1、1、1 等等?

4

2 回答 2

5
arr(i) = arr(0) + arr(1);   

那不应该

arr(i) = arr(i-1) + arr(i-2);

?

于 2013-03-15T23:47:03.553 回答
5

您的代码的作用如下:

arr(3) = 0 + 1
arr(4) = 0 + 1
arr(5) = 0 + 1

等等。您一遍又一遍地分配相同的值。

你需要做:

 arr(i) = arr(i - 1) + arr(i - 2);

解释:

假设您有数组:

  • arr(1) = 0
  • arr(2) = 1

并且i在索引 3 处,这将分配arr(3) = arr(2) + arr(1)1 + 0。因此 arr(3) = 1

i现在在索引 4 处,这将分配arr(4) = arr(3) + arr(2)1 + 1。因此 arr(4) = 2

于 2013-03-15T23:47:28.077 回答