遞推與遞歸區別
遞歸:
一種通過重複將問題分解爲同類的子問題而解決問題的方法。(函數自己調用自己)
從未知到已知
遞推:
用若干步可重複運算來描述複雜問題的方法。通常是通過計算前面的一些項來得出序列中的指定項的值。(重複進行一個過程)
從已知到未知
遞歸包括回溯和遞推兩個過程
舉例說明
斐波那契數列: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、當然,也可以通過數學歸納法(即找規律)推出關係式