/*
*
*fibonacci && golden ratio
*20130626
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
void fibonacci(double * data,unsigned long num)
{
assert(data!= NULL && num>0);
data[0] = data[1] = 1;
double prev = 1;
double next = 1;
unsigned long i = 2;
for (;i< num; i++)
{
data[i] = prev + next;
prev = next;
next = data[i];
}
}
int main(int argc,char ** argv)
{
if(argc< 2)
{
printf("usage:fibonacci num\n");
exit(1);
}
unsigned long num = atoi(argv[1]);
unsigned long i;
double * data = new double[num];
memset(data,0.0,num);
fibonacci(data,num);
double gloden_ratio;
for (i= 1; i< num; i++)
{
gloden_ratio = data[i-1] / data[i];
printf("%.8f ",gloden_ratio);
if(i% 5 == 0)
{
printf("\n");
}
}
printf("\n");
delete[] data;
return 0;
}
下面兩張圖顯示的是1000個fibonacci數的相鄰兩數的比例情況,一張是前排的情況,一張是末尾的情況。
可以從這兩圖看到,在數列的開始,比例還是有明顯的變化,但是到了末尾比例幾乎就沒有變化了,也許取大一點的精度可以看出變化。
很有趣,一個看起來十分簡單的數列竟然有這麼深的內涵,關於fibonacci數列的一些有趣的事件可以瀏覽 Matrix67的blog。