フィボナッチ数列とその最適化

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

おすすめ

転載: blog.csdn.net/m0_51955470/article/details/112267740
おすすめ