[C++]斐波那契数列

斐波那契数列

斐波那契数列(意大利语: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 
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 
#include 
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 
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;
};

引用

wikipedia

你可能感兴趣的:([C++]斐波那契数列)