遞推和遞歸


一、遞推算法基本思想:

     遞推算法是一種理性思維模式的代表,其根據已有的數據和關系,逐步推導而得到結果。遞推算法的執行過程如下:

     1)根據已有的·結果和關系,求解中間結果

     2)判定是否達到要求,如果沒有達到,則繼續根據已知結果和關系求解中間結果;如果滿足要求,則表示尋找到一個正確的答案。

遞推算法往往需要用戶知道答案和問題之間的邏輯關系。在許多數學問題中,都有着明確的計算公式可以遵循,因此往往可以采用遞推來實現。

2.遞推算法示例

     如果一對兩個月大的兔子以后每個月可以生一對兔子,而一對新生的兔子出生兩個月后才可以生兔子。也就是說1月份出生的3月份才能生子。假定一年內兔子沒有死亡事件,那么一年后共有多少對兔子。

    分析產仔問題,逐月分析每月的兔子對數:

    第一個月:1對兔子

   第二個月:1對兔子

   第三個月:2對兔子

   第四個月:3對兔子

   第五個月:5對兔子

   第六個月:8對兔子

  。。。。。。。

可以看出,從第三個月開始,每個月的兔子總隊數是前兩個月的對數之和,公式如下:

  第n個月兔子總數Fn = F(n-1)+F(n-2)

 代碼示例:

    public static int Fibonacci(int n){ //月數
        int t1,t2;
        if(n == 1 || n ==2){
            return 1;
        }else{
            t1 = Fibonacci(n-1);
            t2 = Fibonacci(n-2);
            return t1+t2;
        }
        
    }

二、遞歸算法思想:

 遞歸算法即在程序中不斷反復調用自身來達到求解問題的方法。編寫遞歸算法時,必須使用if語句強制方法在未執行遞歸調用前返回。如果不這樣做,在調用方法后,它將永遠不會返回。

缺點:遞歸算法比非遞歸形式運行速度要慢一些。

算法示例:

  計算階乘,就是從1到指定數之間的所有自然數相乘的結果,n的階乘為:

   n! = n*(n-1)*(n-2)*.......*2*1;

   代碼:

int fact(int n){
   if(n <= 1)
      return n;
   else
      return n*fact(n-1);  //遞歸

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM