プロが教えるわが家の防犯対策術!

1~40番目のフィボナッチ数列を全て表示するプログラミングを作成せよ。 但し、f(1)=1、f(2)=1、f(n)=f(nー1)+f(n-2)(n≧3) と定義する。

この問題がわかりません。誰か教えてください。

A 回答 (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;
  }
}
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/05/29 18:58

> 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() { 省略 }
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/29 19:16

補足。



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」と書くべきなんだけど)を使います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/29 19:17

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=答えです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/28 22:40

どこが判らないのですか?


丸投げは削除されます。
補足に、「ここまではできたけど、この後は?」みたいに記載してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/28 22:39

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