フィボナッチ数列は次のように定義されます。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;
}