-6
#include <iostream>
using namespace std;
void main()
{
  int i = 0;
  while (i < 1000)
  {
      int TEMP = i * 2;
      cout << i << endl;
      TEMP = i;
      i = i +1;
      // ???
  }

  return;
}

私は困惑している??:(

4

3 に答える 3

12

フィボナッチ数列FはF(n) = F(n - 1) + F(n - 2), F(0) = 0, F(1) = 1です。

これがいくつかの疑似コードです:

Start Counter1 at 0
Start Counter2 at 1.

For i = 0 to 1000
    New value = Counter1 + Counter2
    Print new value

    Counter2 = Counter1
    Counter1 = New Value
End For

これは0または1を出力しません。F(2)から始まります。最初に0と1を印刷するだけで、これを簡単に修正できます。また、このコードは最初の1000個の数値を出力します。これを次While Counter1 < 1000のように変更すると、1000に到達または通過したときに停止します。

それを実装するのはあなた次第であり、それがどのように機能するかを確実に理解するようにしてください。

于 2010-02-05T22:37:57.613 に答える
1

まず、フィボナッチ数の定義を理解していることを確認する必要があります。

定義上、最初の2つのフィボナッチ数は0と1であり、残りの各数は前の2つの合計です。一部のソースでは、最初の0を省略し、代わりに2つの1でシーケンスを開始します。

状態を記憶するには、しようとしていた1つだけでなく、2つの変数が必要です。そして、2を掛けるのではなく、2つの変数を追加するだけです。

#include <iostream>
using namespace std;
int main()
{
    int i = 0;
    int j = 1;
    while (i < 1000)
    {
        /* Print a number. */
        cout << i << endl;

        /* Set j to the sum of i and j, and i to the old value of j. */
        int TEMP = j;
        j += i;
        i = TEMP;
    }
    return 0;
}
于 2010-02-05T22:37:08.463 に答える
0

ヒントが必要な場合は、Googleの「再帰」。

答えが必要な場合は、Googleの「再帰フィボナッチC ++」ですが、上記のヒントを参考にしてください:)それだけの価値があります。

于 2010-02-05T22:36:36.593 に答える