• ベストアンサー

フィボナッチ数列 c言語

c言語でフィボナッチ数列を求めるプログラムを再帰関数をつくり作れという問題でしたのように作りました。 windowsでcygwinというものを使ってコンパイルしています #include <stdio.h> int fib(int); main() { int n,i; printf(\"第何項までのフィボナッチ数? n=\"); scanf(\"%d\",&n); fib(0)=0; fib(1)=1; for(i=2;i<=n;i++){ print(\"f(%d)=%d\",n, fib(n));} } エラーは $ gcc fib2.c fib2.c: In function `main\': fib2.c:10: error: invalid lvalue in assignment fib2.c:10: error: invalid lvalue in assignment とでました。 どこかちがいますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

再帰関数を作れという問題で関数のプロトタイプが int fib(int); と宣言されています。 問題の意味はこの関数の中身を再帰関数として作りなさいという意味です。 int fib( int n ) { //ここに処理を書く 自分自身(fib( )関数)を呼び出すこと }

その他の回答 (2)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

>下のように作りかえたのですがf0とf1のときの定義ができなくてうまくいきません。どのようにすればいいですか? >if(n == 1)return(1); >if(n == 2) return (1); 1と2の時の処理が入ってるのに、0と1の時の処理が判らないって? 他人が書いたソースをカンニングして流用してくるから「うまくいかない」のですよ。自分で考えてないのが「出来ない理由」です。 因みに「returnしちゃったら、あとの事は考えなくて良い」ので、elseを書く必要はありませんよ。なので fib(int n){ if(n == 0) return(0); //n==0でreturnしたら、続きは処理しない、つ~か、出来ない if(n == 1) return(1); //n==1でreturnしたら、続きは処理しない、つ~か、出来ない return fib(n-1) + fib(n-2); } でOKです。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>int fib(int); fib関数の定義はどこにありますか? >fib2.c:10: error: invalid lvalue in assignment >fib(0)=0; fib(1)=1; 関数呼び出しの結果を左辺に持ってくることはできない、というエラーです。

noname#74733
質問者

補足

下のように作りかえたのですがf0とf1のときの定義ができなくてうまくいきません。どのようにすればいいですか? コンパイルはできました。 #include<stdio.h> fib(int n){ if(n == 1)return(1); else{ if(n == 2) return (1); else return fib(n-1) + fib(n-2); } } main() { int n, i ; printf("第何項までのフィボナッチ数?(nは正の整数) n="); scanf("%d",&n); for(i=2; i<=n; i++) { printf("F%d = %d\n",n, fib(n)); } }