斐波拉契数列:     1  1  2  3  5  8  13....

第几个数(下标) :  0  1  2  3  4  5  6 ....

问题:输入下标数字,输出相应数字。

  (1) 传统的递推解法:

#include<cstdio>
#include<iostream>
using namespace std;
int main() 
{  int n,f[100];
	scanf("%d",&n);
	f[0]=1; f[1]=1;
	for (int i=2; i<=n; i++) f[i] = f[i-1]+f[i-2];
	cout << f[n] <<endl;
	return 0;
}

  (2)递归求解:

#include<cstdio>
#include<iostream>
using namespace std;
int n,f[100],x;
int digui(int n)
{
	if (n==0) return 1;
	if (n==1) return 1;
	int x =digui(n-1)+digui(n-2);
	return x;
}
int main() 
{
	scanf("%d",&n);
	f[0]=1; f[1]=1;
    cout<<digui(n);
	return 0;
}

  (3)递归+记忆化搜索解法

核心:将一维数组利用起来,存放上一次的解避免了后续的重复计算。

#include<cstdio>
#include<iostream>
using namespace std;
int n,f[100],x;

int digui(int n)
{ 
	if (f[n]!=0) return f[n];
	f[n]=digui(n-1)+digui(n-2);
	return f[n];
}

int main() 
{
	scanf("%d",&n);
	f[0]=1; f[1]=1;
    cout<<digui(n);
	return 0;
}

  

 

相关文章:

  • 2022-12-23
  • 2022-01-16
  • 2021-09-19
  • 2022-02-16
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-19
  • 2021-10-20
相关资源
相似解决方案