- ベストアンサー
C言語でのフィボナッチ数列の表示
1~40番目のフィボナッチ数列を全て表示するプログラミングを作成せよ。 但し、f(1)=1、f(2)=1、f(n)=f(nー1)+f(n-2)(n≧3) と定義する。 この問題がわかりません。誰か教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
フィボナッチ数列とは、 最初に「1、1」があって、次の数は「前の2つを足し算」です。 「1、1、2」になったら「1と2」で「3」、 「1、1、2、3」になったら「2と3」で「5」、 「1、1、2、3、5」になったら「3と5」で「8」。 これを40番目まで繰り返すだけです。 #include <stdio.h> #include <stdlib.h> main() { unsigned long a,b,c; int n; a=0L; b=1L; for (n=1;n<=40;n++) { printf("%d:%ld\n",n,b); c = a + b; a = b; b = c; } }
その他の回答 (4)
- episteme_at_goo
- ベストアンサー率25% (9/36)
> f(1)=1、f(2)=1、f(n)=f(nー1)+f(n-2)(n≧3) と定義する。 定義通りに: int f(int n) { if ( n == 1 || n == 2 ) return 1; else return f(n-1) + f(n-2); } main() { 省略 }
お礼
わざわざ回答をしていただいてありがとうございました。
- chie65536
- ベストアンサー率41% (2512/6032)
補足。 ANo.3のCプログラムは 「追加でf(0)=0を定義し、1番目から順に40番目まで繰り返し」 と言う姑息な手を使ってます。 0番目は「0」 1番目は「1」 と定義しておいても 2番目は0番目と1番目の足し算で「1」 3番目は1番目と2番目の足し算で「2」 が成り立ち、結局は、問題文に定義された 1番目は「1」 2番目は「1」 3番目は1番目と2番目の足し算で「2」 が成り立つのは変わりません。 なので、「a=0L」が『0番目は「0」』を、「b=1L」が『1番目は「1」』を意味します。 なお、フィボナッチ数列が40番目まで行くと16ビットintでは足りなくなるので、32ビットintで計算し、表示も「%ld」(unsignedなのでホントは「%lu」と書くべきなんだけど)を使います。
お礼
丁寧に補足もしていただいてありがとうございます。
void main(void) { unsigned int n=40; int f[n]={1,1}; for (int i=2,Ans=0;i<n;i++) { Ans+=f[i-1]+f[i-2]; } return; } 私ならこんな感じでやります。 Ans=答えです。
お礼
丁寧な回答ありがとうございます。
どこが判らないのですか? 丸投げは削除されます。 補足に、「ここまではできたけど、この後は?」みたいに記載してください。
お礼
大変恐縮ですが、最初からわかりません。
お礼
助かりました。ほんとうにありがそうございます。