-4

以下に示す私のコードについて、誰かがフィードバックを提供できますか? フィボナッチ数列を他の言語で何度も実行しましたが、奇妙な理由で、C でコーディングすると正しい数列が出力されません。何が間違っていたのかわかりません。

#include <stdio.h>

int fibonacci (int n)
{
    (int i = 0; i < n; i++)
{
if (i == 0 || i == 1)
{
     printf("%d,", i);
else
{
     printf("%d,", ((i-1) + (i-2)));
}
}
}


int main () 
{
   int (*fnctPtr)(int number);
   fnctPtr = &fibonacci;
   fnctPtr(9);
   return 0;
}
4

4 に答える 4

0

あなたはこれを持っています、(int i = 0; i < n; i++)そしてあなたは持っているべきですfor (int i = 0; i < n; i++)

于 2013-04-30T15:09:43.093 に答える
0

最初の n 個のフィボナッチ数を計算して出力しようとしています。最初のフィボナッチ数は 0 で、その後に 1 が続き、その後のすべての数は前の 2 つのフィボナッチ数の合計です。

例: 0、1、1、2、3、5、8、13、21、... ドリフトを取得します。

コードの問題は、フィボナッチ パスをたどっていないことです。

コードprintf("%d,", ((i-1) + (i-2))); では、配列またはリンクリストを作成せずに、文字通り配列にインデックスを追加しています。

再帰や配列を使用せずに C でこれを行う簡単で効率的な方法は次のとおりです。

// Prime the first two fibbonaci numbers
int a = 0;  // prior fibbonnaci number
int b = 1;  // current fibbonacci number
// Special case, print up to first 2 fibbonacci numbers
if (n >= 1) printf("%d,", a);  // first fibbonacci number
if (n >= 2) printf("%d,", b);  // second fibbonacci number
// now for the rest of fibbonacci numbers
for (int i = 2; i < n; i++) {
    int next = a + b;
    printf("%d,", next);
    // rotate the numbers
    a = b;
    b = next;
 }
于 2013-04-30T15:29:46.350 に答える
0
#include <stdio.h>
#include <stdlib.h>

void fibonacci (int n){
    int *k = malloc(n*sizeof(int));
    k[0]=0;k[1]=1;
    for(int i = 0; i < n; i++){
        if (i == 0 || i == 1)
            printf("%d,", k[i]);
        else
            printf("%d,", k[i] = k[i-1] + k[i-2]);
    }
    free(k);
}

int main () {
    void (*fnctPtr)(int number);
    fnctPtr = fibonacci;
    fnctPtr(9);
    return 0;
}
于 2013-04-30T15:29:50.257 に答える
0

申し訳ありませんが、コードを本当にクリーンアップする必要があります。以下はC では絶対に間違っています。

(int i = 0; i < n; i++)

ここでループを意図しているとfor確信していますが、何を考えていたのか誰にもわかりません。elseでは、 のifブロックに孤独を囲みFibonacci()ました。あなたのプログラムには間違いが多々ありますので、ユーザーが望む数列の数 (キーボードから入力された選択肢) に基づいてフィボナッチ数列を作成するプログラムを提供しましょう。このプログラムを理解してみてください。フィボナッチ数列の背後にあるロジック自体は単純なので、非常に簡単です。C 言語に非常に慣れていないことは明らかです。

#include<stdio.h>
#include<stdlib.h>

int main() 
{
    int i,l,x=1,y=1,z;
    printf("Enter how many Fibonacci numbers you want\n");
    scanf("%d",&l);

    printf("The Fibonacci series of %d numbers is\n",l);

   if(l==1)
   {
   printf("1");
   exit(0);
   }

   if(l==2)
   {printf("1+1");
   exit(0);
   }    

  printf("1+1+");

  for(i=3;i<=l;i++)
   {
   z=x+y;
   printf("%d",z);    
   x=y;
   y=z;
   if((i+1)<=l) printf("+");
   }    
}

このシリーズを他の言語で実装したと言っているので、シリーズを として開始して0,1,1,2,3,5.....も問題はありませ1,1,2,3,5...ん。xy1x0

于 2013-04-30T15:49:22.363 に答える