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

アバター
Ultimate
記事: 38
登録日時: 15年前
住所: 埼玉県
連絡を取る:

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

投稿記事 by Ultimate » 14年前

今までほとんど使ったことのなかった再帰関数の勉強も兼ねて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=φ


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

CODE:

#include  
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ケタまで正しい値を出せました。

アバター
あーる@Reputeless
記事: 84
登録日時: 15年前

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

投稿記事 by あーる@Reputeless » 14年前

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

あ、fibonacci(0) のときの戻り値がありませぬ Σ(゚д゚

アバター
Ultimate
記事: 38
登録日時: 15年前
住所: 埼玉県
連絡を取る:

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

投稿記事 by Ultimate » 14年前

コメントありがとうございました。
訂正版です。

CODE:

#include  
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;
}