遞推和遞歸

轉載自: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)
        } 
   } 
    顯然能用遞推的話就用遞推,   一般肯定要比遞歸快,除非有的問題不用遞歸做不出來的. 
線性規劃法在推導時往往是用遞歸的形式,但最後可以化爲遞推。

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