菲波那契数列定义为:f(1) = 1; f(2) = 1; 当n>2时,f(n) = f(n-1) + f(n-2),输入n,求菲波那契数列的第n项。要求:用递归函数求菲波那契数列的第n项。
1.递归
代码如下(未优化):
//Wecccccccc
//2021.1.6
#include <iostream>
using namespace std;
int fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
int main() {
int n, c;
cin >> n;
c = fib(n);
cout << c << endl;
return 0;
}
优化代码如下:
//Wecccccccc
//2021.1.6
#include <iostream>
using namespace std;
int fibs[1000];
int fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
if (fibs[n] != 0) {
return fibs[n];
}
return fibs[n] = fib(n - 1) + fib(n - 2);
}
int main() {
int n, c = 0;
cin >> n;
c = fib(n);
cout << c << endl;
return 0;
}
2.递推
代码如下:
//author:Wecccccccc
//time:2021.1.29
#include <iostream>
using namespace std;
int f[50];
int main() {
int n;
cin >> n;
f[1] = 1, f[2] = 1;
for (int i = 3; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
cout << f[n] << endl;
return 0;
}