0

私が知る限り、これは機能するはずです。

最初の 2 つの要素は 1 に設定されます (最初の 0 は無視します)。for ループは配列をループすることになっています。フィボナッチ数は前の 2 つの数の合計に等しいので、それらを加算してから表示します。

出力はすべて 2 で、その理由はよくわかりません。

注:私は答えを直接探しているわけではありませんが、自分でこれを理解できる方法を探しています.

//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];

あなたは と だけを含んii-1います.フィボナッチ公式には3つの連続したインデックスが含まれています.

ところで、これ:

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

恐ろしいIMOです。それを 2 行に分けてください。

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 のサイズは 40 ではなく 41 でなければなりません。

于 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 に答える