遞推算法

遞推與遞歸區別

遞歸:一種通過重複將問題分解爲同類的子問題而解決問題的方法。(函數自己調用自己
從未知到已知

遞推:用若干步可重複運算來描述複雜問題的方法。通常是通過計算前面的一些項來得出序列中的指定項的值。(重複進行一個過程
從已知到未知

遞歸包括回溯遞推兩個過程


舉例說明

斐波那契數列:1 1 2 3 5 8 13 21…
F(n)=F(n-1)+F(n-2) ,F(0)=F(1)=1
用遞歸求F(N)的斐波那契數

#include<bits/stdc++.h>
using namespace std;

int fact(int N) //遞歸法求 
{
	if(N<=1) 
	return 1;
	return fact(N-1)+fact(N-2);
}
int main()
{
	int N;
	cin>>N;
	fact(N); 
	cout<<fact(N);
}

用遞推求F(N)的斐波那契數

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a[100]={}; //遞推法求 
	int N;
	a[0]=1;
	a[1]=1;
	cin>>N;
	for(int i=2;i<=N;i++)
	a[i]=a[i-1]+a[i-2];
	
	cout<<a[N];
}

求解遞推思路

往往遞推是需要求出一個關係式,一個數列的下一項是由它前面幾項運算得到的( 如F(n)=F(n-1)+F(n-2) )

思考方式:求第n個方案的時候,0~n-1的方案都是已知的
1、將第n個元素加進去,看對整個方案的影響,推出關係式
2、當然,也可以通過數學歸納法(即找規律)推出關係式


遞推題集

遞推:HDU 阿牛的EOF牛肉串

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章