古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數爲多少?

題目:
古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數爲多少?
問題分析:
假設第一個月的這一對兔子分別爲A,B。每個月的兔子對數依次如下:
第一個月:一對(A和B)
第二個月:一對(A和B)
第三個月:兩對(A和B A和B生下的一對C和D)
第四個月:三對(A和B C和D A和B生下的一對E和F)
第五個月:五對(A和B C和D E和F A和B生下的一對G和H C和D生下的I和J)
第六個月:八對(A和B C和D E和F G和H I和J A和B生下的一對K和L C和D生下的M和N E和F生下的O和P)
......
通過對前六個月的分析,前六個月每個月的對數依次是:1 1 2 3 5 8
可以看出 從第三個月開始 每個月的兔子對數是前兩個月的對數之和
程序設計:
1 1 2 3 5 8......其實是一組斐波拉契數列,也叫作“兔子數列”,在程序設計中經常會遇到這種情況,一般都通過遞歸來解決。
如果月份爲1或者2,則兔子的對數返回1,否則兔子的對數返回前兩個月的對數之和
代碼:
import org.junit.Test;
public class Rabbit {
	/**
	 * 求某個月的兔子對數
	 * @param month(月份)
	 */
	public static int getNumber(int month) {
		if(1 == month || 2 == month) 
			return 1;
		else 
			return getNumber(month - 1) + getNumber(month - 2);
	}
	//測試
	@Test
	public void test() {
		System.out.println(getNumber(1)); //--->1
		System.out.println(getNumber(2)); //--->1
		System.out.println(getNumber(3)); //--->2
		System.out.println(getNumber(4)); //--->3
	}
}

發佈了72 篇原創文章 · 獲贊 50 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章