菲波那契数列定义为: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;
}