C言語プログラミング フィボナッチ数列(再帰呼び出し)

| カテゴリ:C言語

フィボナッチ数列ってご存知でしょうか?
知らない人の方が多いかもしれないですね。
「今見ている数値が前の二つの数値の和に等しい数列」のことです。
「1,1,2,3,5,8,13……」たとえば、5を見ると、前の二つの数値「2」「3」の和になっています(一つ目と二つ目は1と定義しています)。

このフィボナッチ数列、ある種、クリエイターサイトにすごい適した話題です。
フィボナッチ数列の隣同士の値の比は、黄金比に収束するのです。
黄金比、きっとデザイン系の方は制作中にかなり気にしているのではないでしょうか。
縦横の比率が1:1.618、美術品や自然界に多く見られる値で、人間の目に非常に美しく映ると言われています。
さらには白銀比というものもあるそうです。こちらは初耳でした。

ひまわりの種を螺旋に沿って数えると、フィボナッチ数列と等しいそうです。

という前置きはそろそろ終わりとしまして、今回はフィボナッチ数列のC言語プログラミングを紹介します。
前回、階乗処理について紹介しましたので、同じ階層構造仲間ということですね。
以下、フィボナッチ数列にて指定された項番の値を返す関数です。

/* フィボナッチ数列関数ここから */
/* n:値を知りたい項番 */
/* わかりやすさのため、data[0]は使用していません */
int feb(int n){
int i,data[n+1];
if(n < 3)return (1);
data[1] = data[2] = 1;
for(i = 3 ; i < n+1 ; i++){
data[i] = data[i-1] + data[i-2];
}
return (data[n]);
}
/* フィボナッチ数列関数ここまで */

フィボナッチ数列についても階乗と同様、再帰呼び出し(自分で自分を呼ぶ)の考え方を使用すると、プログラムを簡潔にできます。
再帰を使用したフィボナッチ数列関数は以下の通りです。

/* フィボナッチ数列関数ここから */
/* n:値を知りたい項番 */
int feb(int n){
if(n == 1)return(1);
else{
if(n == 2) return (1);
else return feb(n-1) + feb(n-2);
}
}
/* フィボナッチ数列関数ここまで */

質問がございましたら質問掲示板にお書き込みください。
青春B 質問掲示板

Wikipedia フィボナッチ数列
Wikipedia 再帰呼び出し
Wikipedia 黄金比
Wikipedia 白銀比
Wikipedia C言語

概要

青春B運営メンバー多口カタンによる雑記blogです。
自己紹介はこちら。開発物をまとめたものはこちら
 
ヘッダーイラストはkojiさん制作です。
感想・意見・要望等ありましたら気軽にフォームにてコンタクトくださいませ。
 
Twitterはじめましたので誰でも気軽に声かけてくださいね。