常见算法-费式数列(Fibonacci)
1、说明
Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:「若有一隻免子每个月生一隻小免子,一个月后小免子也开始生产。起初只有一隻免 子,一个月后就有两隻免子,二个月后有三隻免子,三个月后有五隻免子(小免子投入生产)……」。
如果不太理解这个例子的话,举个图就知道了,注意新生的小免子需一个月成长期才会投入生产,类似的道理也可以用于植物的生长,这就是Fibonacci数 列,一般习惯称之为费氏数列,例如以下: 1、1 、2、3、5、8、13、21、34、55、89……
2、C++代码
#include<iostream>
using namespace std;
// non-recursive
void Fibonacci01(int f[], int n) {
for (int i = 0; i < n; i++) {
//f[n] = 1 n<2
//f[n] = f[n-1] + f[n-2] n>=2
if (i == 0 || i == 1)
f[i] = 1;
else
f[i] = f[i - 1] + f[i - 2];
}
}
// recursive
int Fibonacci02(int i) {
if (i == 0 || i == 1)
return 1;
else
return Fibonacci02(i - 1) + Fibonacci02(i - 2);
}
void PrintFibonacci(int f[], int n) {
for (int i = 0; i < n; i++) {
cout << f[i] << " ";
}
cout << endl;
}
int main() {
int f1[12] = { 0 };
Fibonacci01(f1, 12);
PrintFibonacci(f1, 12);
int f2[12] = { 0 };
for (int i = 0; i < 12; i++) {
f2[i] = Fibonacci02(i);
}
PrintFibonacci(f2, 12);
return 0;
}