電子書籍の厳選無料作品が豊富!

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
とでました。
どこかちがいますか?

A 回答 (3件)

再帰関数を作れという問題で関数のプロトタイプが


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

>下のように作りかえたのですが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です。
    • good
    • 0

>int fib(int);



fib関数の定義はどこにありますか?

>fib2.c:10: error: invalid lvalue in assignment
>fib(0)=0; fib(1)=1;

関数呼び出しの結果を左辺に持ってくることはできない、というエラーです。

この回答への補足

下のように作りかえたのですが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));
}
}

補足日時:2008/11/26 12:22
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!