0

フィボナッチ数列の最初の 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);
}
4

6 に答える 6

0

まず、データ型を float から integer またはその他のデータ型に変更することをお勧めします。float は正確な数値ではなく、while (n <= maxn) の代わりに while (n = maxn) を使用した場合、2 つの float が決して一致しないため、無限ループになる可能性があります。

第二に、フィボナッチ数列が何であるかを本当に理解していないようです。ウィキペディの記事http://en.wikipedia.org/wiki/Fibonacci_numberをご覧ください。

あなたが持っているように、フィビノッチ数は (n - 1) + (n - 2) ではありません。これは、シーケンス内の前の 2 つの数値の合計です。最後の 2 つの値を保持し、これらの値に基づいて次の値を計算するようにループを再構築する必要があります。

于 2013-09-17T18:56:01.523 に答える
0

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);
}
于 2013-09-17T19:02:37.197 に答える
0

提案

  1. 整数の問題を行うときは、FP 型の前に整数型を検討してください。

  2. あなた;while (n <= maxn);{

  3. の代わりに.、浮動小数点形式でaを使用します。%4.2f%4,2f

  4. フィボナッチは、単純に ではなく、前の 2 つの項の合計ですfib = (n - 1) + (n - 2)

  5. 解決策を考えてみましょう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]; 
  }
}  
于 2013-09-17T19:48:13.787 に答える