其实dp思想就是,暂时给你存着,别重复计算
dp自顶而下与自底而上的Fibonacci实现
dp自顶而下与自底而上的Fibonacci实现
相比冗杂不存储每次都重来的头铁递归,dp省时不少

#include<iostream>
using namespace std;

int fib1(int n,int arr[])          //自顶向下——备忘录  有返回值
{
    if(n==0)
    {
    	arr[n]=0;
    	return 0;
	}

    else if(n==1||n==2)
    {
    	arr[n]=1;
    	return 1;
	}

    else if(n>=3)
	{
		if (arr[n]==-1)
		{
			arr[n]=fib1(n-1,arr)+fib1(n-2,arr);  //好不容易算出来先保存
			return fib1(n-1,arr)+fib1(n-2,arr);  //然后把这个值传给有用的那个它,因为int 所以不如写成void
	    }
	}

}

void fib2(int n,int arr[])   //自顶向下——备忘录        不用返回值写法
{
	if(n==0)
	arr[n]=0;

	else if(n==1||n==2)
	arr[n]=1;

	else if(n>=3)
	{
		if(arr[n]==-1)
		{
			fib2(n-1,arr),fib2(n-2,arr);
			arr[n]=arr[n-1]+arr[n-2];
		}
	}
}
void fib3(int n,int arr[])       //越用递归越费时间内存
{ 

	for(int i=0; i<=n; ++i) 
	{
		if(i==0)
			arr[i]=0;

		else if(i==1||i==2)
			arr[i]=1;

		else
			arr[i]=arr[i-1]+arr[i-2];
	}


}

int main() {
	int n,arr[1000];
	cin>>n;

	for(int i=0; i<=n; i++)
		arr[i]=-1;

	fib3(n,arr);

	cout<<arr[n];
	return 0;
}

相关文章:

  • 2021-12-23
  • 2022-01-23
  • 2022-12-23
  • 2022-01-24
  • 2022-12-23
  • 2021-12-20
  • 2022-12-23
猜你喜欢
  • 2021-08-12
  • 2021-09-24
  • 2022-01-23
  • 2021-09-30
  • 2022-12-23
相关资源
相似解决方案