2016-09-22 6 views
0

私が達成しようとしているシーケンスはフィボナッチに似ていますが、N番目の数字はN-1 + N-2の代わりにKの値を持ち、N番目の数字はN-1 + N-2 + ... + N-Kになります。ベクトル/再帰を伴わないフィボナッチ様のシーケンスのためのCプログラムの作成方法?

N番目の数字がKNと入力されるまで、シーケンスを書き込むCプログラムを記述したいと思います。ベクトルや再帰を使用してはいけません。

更新:

何の可能な解決策はありませんが、いくつかの問題の解決へのベクター(配列)の必要性を証明するための運動でした。

+3

どのようなベクターですか? Cにはベクトルがありません...ループを使用します。 –

+2

@EugeneSh .:文脈上、「ベクトル」が配列の別の名前として使用されていることは明らかです(少なくとも私にとって)。私の古いCS教授のほとんどは数学の学位を持ち、FortranとCで1Dの配列に "ベクトル"という言葉を使っていました。 –

+0

これは、完全な配列を格納する配列または配列のみを除外しますか?つまり、最後の 'K '値が許容されるように動作する配列ですか? – LutzL

答えて

0

致命的な質問だったので、本当の答えはありません。

1

これまでのKの値には、何らかの種類のストレージが必要です。質問の要点は、そのために使用できるものと推測します。

コールスタック/関数のパラメータは再帰的に使用しないでください。使用できません。あなたは配列を意味する "ベクトル"を使うことはできません。 Kが受ける可能性のある限界値が非常に低い場合を除いて、個々のローカル変数を使用するのは非常に面倒で、実際には実行できません。私が見る唯一の選択肢は、

  1. リンクリストのいくつかのフレーバーです。 (しかし、リンクされたリストは、その用語の非常に緩やかな意味で "ベクトル"とみなされるかもしれません)。
  2. 外部ファイル。

この練習問題は、あなたが授業で勉強していたことに関連している可能性が高いので、インストラクターが何を念頭に置いているかを知るはずです。

実際の実装はそのまま実行します。

+0

まだ学習していないので外部ファイルにすることはできません。最初のオプションでは、すべてのK値のリストを手作業で書く必要はありませんか? Kは整数であれば動作しません。 – emiliopedrollo

+0

@emiliopedrollo、いいえ、それぞれの 'K'値に対して別々のリストを書く必要はありません。柔軟な長さを持つことは、リンクされたリストの主な特徴の1つです。その方法をとった場合は、リストの実装は1つだけ必要です。問題に適切な方法で適用するだけで済みます。 –

+0

したがって、リンクされたリストはポインタを使用したアプローチですか?まあ、私たちはクラスでまだ見ていないので、それは意図した解決策ではないと推測します。今私はそれをする方法がないと思っています。 – emiliopedrollo

1

免責事項 - これはないですが、私はあなたの教授が探しているものませを繰り返し、しかし...

あなたがrecurrence relationsを解決する方法を知っているならば、あなたはの閉じた形を見つけることができます関係を各値に対してKと計算し、それを単に計算する(ループなし、中間値の記憶なし)。例えば、nは番目フィボナッチ数あなたのケースでは機能

long double fib_closed(unsigned int n) 
{ 
    long double sqrt_5 = sqrtl(5.0); 
    long double phi = (1 + sqrt_5)/2.0; 
    long double psi = (1 - sqrt_5)/2.0; 

    return floorl((powl(phi, n) - powl(psi, n))/sqrt_5); 
} 

を使用して計算することができ、各Kに異なる漸化式を(つまり、N-ための漸化式である必要があるだろう1 + N-2 + N-3はN-1 + N-2 + N-3 + N-4などの反復関係とは異なります)、あなたが使用したいと思いK

TEであることを行っていない、それについて考え、
switch(K) 
{ 
    case 3: return f_closed_3(n); break; 
    case 4: return f_closed_4(n); break; 
    ... 
} 

ひどく実用的。繰り返しますが、これはではなく、あなたの教授が探しているものですが、将来的に面白い演習になるかもしれません。

+0

そのようにして、1から正の無限大までの範囲のK値ごとに関係を見つけたり、書き込んだりする必要があります。それで実現不可能。 – emiliopedrollo

関連する問題