Java算法-遞推算法思想

遞推算法是經常使用的算法思想,在數學計算等方面有着普遍的應用。遞推算法適合有着明顯公式的規律場合。算法

1、遞推算法基本思想

    遞推算法是一種理性思惟模式的表明,其根據已有的數據和關係,逐步推導而獲得結果。遞推算法的執行過程以下:spa

  1. 根據已知結果和關係,求解中間結果。
  2. 判斷是否達到要求,若是沒有達到。則繼續根據已知結果和關係求解中間結果;若是知足要求,則表示尋找到一個正確的答案。

    遞推算法每每須要用戶知道答案和問題之間的邏輯關係。在許多數學問題中,都有着明確的計算公式能夠遵循,所以每每能夠採用遞推算法來實現。code

2、遞推算法實例

    遞推算法是基本的算法思想,經常使用於數學相關的場合。蝦米那經過一個簡單的數學例子來分析遞推算法的應用。遞歸

    數學裏面的斐波那契數列即是一個使用遞推算法的經典例子以下:事件

    若是一對兩個月大的兔子之後每個月均可以生一對小兔子,而一對新生的兔子出生兩個月後才能夠生小兔子。也就是說,1月份出生,三月份纔可產仔。那麼假定一年內沒有發生兔子死亡事件,那麼1年後共有多少對兔子呢?ci

    一、遞推算法

        先來分析一下兔子產仔問題,逐月分析每個月兔子對數。數學

        

        從上述內容能夠看出,從第3個月開始,每月的兔子總對數等於前兩個月兔子數的總和。相應的計算公式(Fn=F(n-1)+F(n-2)),這裏的n是第n個月,這裏初始第1個月的兔子數爲F1=1,F2=1。實例以下:class

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);//遞歸調用
        int num = t1 + t2;
        return num;
    }
}

    二、遞推算法求解兔子產仔問題

        根據上述通用的兔子產仔問題算法,能夠求解任意該類問題。下面給出完整的兔子產仔問題求解代碼im

public class mian1 {
    /**
     * 若是一對兩個月大的兔子之後每個月均可以生一對小兔子,而一對新生的兔子出生兩個月後才能夠生小兔子。
     * 也就是說1月份出生,三月份纔可產仔。那麼假定一年內沒有發生兔子死亡事件,那麼1年後共有多少對兔子呢?
     */
    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);//遞歸調用
            int num = t1 + t2;
            return num;
        }
    }
    public static void main(String[] args) {
        System.out.print("請先輸入月份:");
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int num = fibonacci(n);
        System.out.println("通過"+n+"月的時間,共繁殖了"+num+"對兔子!");

    }
}

    效果以下:next

請先輸入月份:12
通過12月的時間,共繁殖了144對兔子!
相關文章
相關標籤/搜索