基本算法之遞推算法

基本算法之遞推算法

一.遞推算法基本思想

遞推算法是一種理性思維模式的代表,其根據已有的數據和關係,逐步推導而得到結果。其大致步驟如下:
1.根據已知結果和關係,求解中間結果。
2.判定是否達到要求,如果沒有達到,則繼續根據已知結果和關係求解中間結果;如果滿足要求,則表示找到一個正確的答案。
**小技巧:**遞推算法往往需要用戶知道答案和問題之間的關係。在許多數學問題中,都有着明確的計算公式可以遵循,因此往往可以採用遞推算法來實現。

二.遞推算法典型實例

數學裏面的斐波那契數列便是一個使用遞推算法的經典例子。13世紀意大利數學家斐波那契的《算盤書》中記載了典型的兔子產仔的問題:如果一對兩個月大的兔子以後每一個月都可以生一對小兔子,而一對新生的兔子出生兩個月後纔可以生小兔子。 也就是說,1月份出生,3月份纔可以產仔。那麼假設一年內沒有發生兔子死亡的事件,那麼一年後共有多少對兔子?
1.分析:
逐月分析每月的兔子對數
第一個月:一對兔子;
第二個月:一對兔子;
第三個月:兩對兔子;
第四個月:三對兔子;
第五個月:五對兔子;

從上述內容可以看出,從第三個月開始,每個月的兔子對數等於前兩個月兔子數的總和,對應的計算公式如下:
第N個月兔子總數Fn=F(n-2)+F(n-1)。
這裏,初始第一個月的兔子數爲F1=1,第二個月的兔子數爲F2=1。
2.參考代碼:

mport java.util.Scanner;

public class Fibonacci {
	public static int fibonacci(int m) {
		int t1,t2;
		if(m == 1 || m == 2) {
			return 1;
		}else {
			t1=fibonacci(m-1);     //遞歸調用
			t2=fibonacci(m-2);
			return t1+t2;
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("遞推算法求兔子產子問題");
		System.out.println("輸入時間:");
		Scanner input = new Scanner(System.in);
		int m = input.nextInt();
		int num = fibonacci(m);
		System.out.println("經過"+m+"個月的時間,共繁殖了"+num+"對兔子!");
	}

}

3.結果展示:
在這裏插入圖片描述

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