2

そこで、フィボナッチ数列の最初の N 項を出力するアルゴリズムのフローチャートを作成する宿題があります。確かに難しいことではありませんが、先生は、これはわずか 6 つのフローチャートの「バルーン」で実行できると教えてくれました。そして、ここに問題があります-私はこのようにしたかったのですが、できなかったようです...つまり、最短の方法はN> 2かどうかを確認することだと思います-そうでない場合は、それは 1 または 2 で、それぞれ 0 または 1 を出力します。その後でのみ、「通常の」 F(n)=F(n-1)+F(n-2) 式を使用できます。そうしないと、クラッシュします。より正式に書く:

  1. 入力N
  2. N>2?
    • いいえ: 1 かどうかを確認します。そうであれば、0 を出力して停止します。
    • いいえ: 2 かどうかを確認します。そうであれば、0 と 1 を出力して停止します。
    • はい: 3 に進みます
  3. i=3 とします。i < N の間: fib(i)=fib(i-1)+fib(i-2) および fib(i) を出力します。
  4. 止まる。

問題は、これを作るのに、それ以上ではないにしても、約10箱かかると思います. では、より短い方法は何でしょうか?私がオンラインで見つけたすべてのアルゴリズムは、2 を超える N しか得られないと推測する傾向がありますが、そうではない可能性があります。助けていただけますか?

編集: OK、私はそれを 8 ボックスに微調整しました。このようなもの:

  1. 入力 N
  2. 年長者 = 0、年少者 = 1 (それぞれ、シリーズの (n-2) 番目と (n-1) 番目の項)、現在 = 1、i = 2 とします。
  3. N<=1 ですか?
    • はい: 古いものを出力し、終了します。
    • いいえ: 4 に進みます
  4. 年上、年下を出力します。
  5. i < N?
    • はい: 現在 = 年上 + 年下、年上 = 年下、年下 = 現在、i+=1。現在の印刷、5 に進みます。
    • 終わりがない。

ここでさらに何か微調整できますか?

4

1 に答える 1

2
  1. 入力N
  2. ( x1 , x2 ) = (0, 1) とする
  3. N ≤ 0 ですか ?
    • はい: 停止
    • いいえ: ステップ 4 に進みます
  4. プリント×1
  5. ( x1 , x2 , N ) = ( x2 , x1 + x2 , N - 1) とし、手順 3 に進みます。

「停止」を独自のステップにする必要がある場合は、ステップ 6 になります。

于 2012-10-14T13:36:43.893 に答える