轉載自:http://blog.csdn.net/shunrei/article/details/5680601
遞推:構造低階的規模(如規模爲i,一般i=0)的問題,並求出解,推導出問題規模爲i+1的問題以及解,依次推到規模爲n的問題。(知道第一個,推出下一個,直到達到目的。,關鍵要找到遞推公式)
遞歸:將問題規模爲n的問題,降解成若干個規模爲n-1的問題,依次降解,直到問題規模可求,求出低階規模的解,代入高階問題中,直至求出規模爲n的問題的解。(要知道第一個,需要先知道下一個,直到一個已知的,再反回來,得到上一個,直到第一個。)
遞歸包括回溯和遞推兩個過程。
最好的例子是斐波那契數列: 0 1 1 2 3 5 8 13 21 ... ...
總結成公式就是F(n)=F(n-1)+F(n-2), F(0)=0,F(1)=1;
你可以用遞歸的方法寫這個函數:
int F(int n)
{
if (n <2)
return n;
else
return F(n-1)+F(n-2);
}
但也可以用遞推的方式:
int F(int n)
{
if (n <2)
return 1;
int twoback=0,oneback=1,current;
for (int i=0; i <n-1; i++)
{
current=oneback+twoback;
twoback=oneback; //保存f(n-1),下次的f(n-2) oneback=current; //保存f(n),下次的f(n-1)
}
}
顯然能用遞推的話就用遞推, 一般肯定要比遞歸快,除非有的問題不用遞歸做不出來的.
線性規劃法在推導時往往是用遞歸的形式,但最後可以化爲遞推。