【斐波那契】斐波那契数列的三种实现
代码
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
int Fibonacci(int n){
if (!n) return 0;
else if (n == 1) return 1;
else return Fibonacci(n-1) + Fibonacci(n-2);
}
const int MAXN = 1e5;
int FibonacciSecond(int n){
if (!n) return 0;
else if (n == 1) return 1;
else {
int Fi[MAXN];
Fi[0] = 0;
Fi[1] = 1;
for (int i = 2; i <= n; i++) Fi[i] = Fi[i-1]+Fi[i-2];
return Fi[n];
}
}
int FibonacciThird(int n){
if (!n) return 0;
else if (n == 1) return 1;
else {
stack<int> s;
s.push(0);
s.push(1);
int tmp = 0;
for (int i = 2; i <= n; i++){
int pushtmp = s.top()+tmp;
tmp = s.top();
s.push(pushtmp);
}
return s.top();
}
}
int main() {
int n;
printf("请输入数字:\n");
scanf("%d", &n);
printf("递归实现结果:%d\n", Fibonacci(n));
printf("非递归实现结果:%d\n", FibonacciSecond(n));
printf("栈存放实现结果:%d\n", FibonacciThird(n));
return 0;
}