斐波那契数列
斐波那契数列(意大利语:Successione di Fibonacci),又译为菲波拿契数列、菲波那西数列、斐波那契数列、黄金分割数列。
在数学上,斐波那契数列是以递归的方法来定义:
- F0 = 0
- F1 = 1
- Fn = Fn-1 + Fn-2
用文字来说,就是费波那契数列由0和1开始,之后的费波那契系数就是由之前的两数相加而得出。首几个费波那契系数是:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……(OEIS中的数列A000045)
特别指出:0不是第一项,而是第零项。
程序代码
1. 递归实现
//一般递归实现方式
#include <iostream>
using namespace std;
inline int f(const int radix) {
if (radix == 1 || radix == 2) return 1;
else return f(radix - 1) + f(radix - 2);
};
int main(int argc, char *argv[]) {
int n; cin >> n;
cout << f(n) << endl;
return 0;
};
//记忆化搜索优化后的递归实现方式
#include <iostream>
#include <cstring>
using namespace std;
const int MAX_SIZE = 1111;
int h[MAX_SIZE] = {};
inline int f(const int radix) {
if (radix == 1 || radix == 2) return h[radix] = 1;
if (h[radix]!= -1) return h[radix];
else return h[radix] = f(radix - 1) + f(radix - 2);
};
int main(int argc, char *argv[]) {
memset(h, -1, sizeof h);
int n; cin >> n;
cout << f(n) << endl;
return 0;
};
2. 递推实现
//一般递推实现方式
#include <iostream>
using namespace std;
const int MAX_SIZE = 1111;
int f[MAX_SIZE] = {0, 1, 1};
int main(int argc, char *argv[]) {
for (int i = 3; i <= 1110; ++i)
f[i] = f[i - 1] + f[i - 2];
int n; cin >> n;
cout << f[n] << endl;
return 0;
};