合計 昨日 今日

アバター
Ultimate
 
記事: 38
登録日時: 2010年10月16日(土) 20:20
お住まい: 埼玉県
日記: 日記を見る (20)
日記
- 9月 2011
+ 7月 2011
+ 6月 2011
+ 5月 2011
+ 1月 2011
+ 12月 2010
+ 11月 2010
+ 10月 2010
カテゴリ
カテゴリに指定された日記はありません

Fibonacci数列を利用してφの近似値を求めてみた

パーマリンクby Ultimate on 2010年11月28日(日) 16:55

今までほとんど使ったことのなかった再帰関数の勉強も兼ねてFibonacci数列を利用した黄金数の近似値を求めるプログラムを作ってみました。
なぜそうなるのか以前証明したので書きます。。

Proof)
Fibonacci数列は、1つ前の数と2つ前の数を足した数の列です。
こんな感じです。
1 1 2 3 5 8 13 21 ・・・
なので、n番目のFibonacci数列の数をFnとすると、Fn+2=Fn+1+Fnとなる。
両辺をFn+1で割ると、Fn+2/Fn-1=1+1/(Fn+1/Fn)
よって、これらの数が1つの値に収束するとすれば、x = 1+1/xというようにできます。
両辺にxをかけてx^2=x+1よってついに
x2-x-1=0
x = 1+√5/2
x>0よりx=φ


それではソースを・・・
再帰関数を利用してみたためかなり効率が悪く計算に時間がかかりますが・・・


コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h> 
int fibonacci(int num){
    int x;
    if(num==1)return 1;
    if(num>=2)return fibonacci(num-1)+fibonacci(num-2);
}
int main(){
    int num;
    printf("Fibonacci数列を利用して、黄金数の近似値を求める\n\n");
    while(1){
        printf("自然数を入力してください。\n数値が大きいほどより黄金数に近い数値が出せます。\n(ただし、40を超える程度の数値になると、かなり時間がかかるので、大きくても40程度がいいでしょう。)\n");
        scanf("%d",&num);
        printf("%.20lf\n\n\n\n",(double)fibonacci(num)/fibonacci(num-1));
    }
return 0;
}


ちなみに30で計算すると
1.61903398874820358900となり、
小数点以下11ケタまで正しい値を出せました。

コメント数: 2 閲覧数: 2471
コメント

Re: Fibonacci数列を利用してφの近似値を求めてみた

パーマリンクby あーる@Reputeless on 2010年11月28日(日) 17:53

黄金比って不思議ですねぇ。

あ、fibonacci(0) のときの戻り値がありませぬ Σ(゚д゚
アバター
あーる@Reputeless
 
記事: 84
登録日時: 2010年10月17日(日) 09:36
お住まい: 千葉
日記: 日記を見る (56)

RE: Fibonacci数列を利用してφの近似値を求めてみた

パーマリンクby Ultimate on 2010年11月28日(日) 18:18

コメントありがとうございました。
訂正版です。
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h> 
int fibonacci(int num){
    int x;
    if(num==1||num==0)return 1;
    if(num>=2)return fibonacci(num-1)+fibonacci(num-2);
}
int main(){
    int num;
    printf("Fibonacci数列を利用して、黄金数の近似値を求める\n\n");
    while(1){
        printf("自然数を入力してください。\n数値が大きいほどより黄金数に近い数値が出せます。\n(ただし、40を超える程度の数値になると、かなり時間がかかるので、大きくても40程度がいいでしょう。)\n");
        scanf("%d",&num);
        printf("%.20lf\n\n\n\n",(double)fibonacci(num)/fibonacci(num-1));
    }
return 0;
}
アバター
Ultimate
 
記事: 38
登録日時: 2010年10月16日(土) 20:20
お住まい: 埼玉県
日記: 日記を見る (20)

オンラインデータ

登録ユーザー: みけCAT