フィボナッチ数列の最初の 10 項を書こうとしています。私は正しい線にいるように感じますが、実際のコード (C) を完全に把握していないようです。
float fib = 0;
const float minn = 1;
const float maxn = 20;
float n = minn;
while (n <= maxn);{
n = n + 1;
printf (" %4,2f", fib);
fib = (n - 1) + (n - 2);
}
まず、データ型を float から integer またはその他のデータ型に変更することをお勧めします。float は正確な数値ではなく、while (n <= maxn) の代わりに while (n = maxn) を使用した場合、2 つの float が決して一致しないため、無限ループになる可能性があります。
第二に、フィボナッチ数列が何であるかを本当に理解していないようです。ウィキペディの記事http://en.wikipedia.org/wiki/Fibonacci_numberをご覧ください。
あなたが持っているように、フィビノッチ数は (n - 1) + (n - 2) ではありません。これは、シーケンス内の前の 2 つの数値の合計です。最後の 2 つの値を保持し、これらの値に基づいて次の値を計算するようにループを再構築する必要があります。
C でフィボナッチ アルゴリズムを実装するには、(少なくとも) 2 つの方法があります。
反復:
int fib(int n){
if (n == 0)
return 0;
int a = 1
int b = 1;
for (int i = 3; i <= n; i++) {
int c = a + b;
a = b;
b = c;
}
return b;
}
再帰的:
unsigned int fibonacci_recursive(unsigned int n)
{
if (n == 0)
{
return 0;
}
if (n == 1) {
return 1;
}
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2);
}
void main(){
unsigned int i = fibonacci_recursive(10);
}
提案
整数の問題を行うときは、FP 型の前に整数型を検討してください。
あなた;
のwhile (n <= maxn);{
の代わりに.
、浮動小数点形式でaを使用します。%4.2f
%4,2f
フィボナッチは、単純に ではなく、前の 2 つの項の合計ですfib = (n - 1) + (n - 2)
。
解決策を考えてみましょうunsigned
:
C コード:
void Fibonacci_Sequence(unsigned n) {
const unsigned minn = 1;
const unsigned maxn = 20;
unsigned F[3];
F[0] = 0;
F[1] = 1;
unsigned i = 0;
for (i = 0; i <= maxn; i++) {
if (i >= minn) printf(" %u,", F[0]);
F[2] = F[1] + F[0];
F[0] = F[1];
F[1] = F[2];
}
}