• ベストアンサー

C言語でのフィボナッチ数列の表示

1~40番目のフィボナッチ数列を全て表示するプログラミングを作成せよ。 但し、f(1)=1、f(2)=1、f(n)=f(nー1)+f(n-2)(n≧3) と定義する。 この問題がわかりません。誰か教えてください。

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

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

フィボナッチ数列とは、 最初に「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;   } }

Ansernal
質問者

お礼

助かりました。ほんとうにありがそうございます。

その他の回答 (4)

回答No.5

> 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() { 省略 }

Ansernal
質問者

お礼

わざわざ回答をしていただいてありがとうございました。

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

補足。 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」と書くべきなんだけど)を使います。

Ansernal
質問者

お礼

丁寧に補足もしていただいてありがとうございます。

noname#50176
noname#50176
回答No.2

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=答えです。

Ansernal
質問者

お礼

丁寧な回答ありがとうございます。

noname#77845
noname#77845
回答No.1

どこが判らないのですか? 丸投げは削除されます。 補足に、「ここまではできたけど、この後は?」みたいに記載してください。

Ansernal
質問者

お礼

大変恐縮ですが、最初からわかりません。