題目:
古典問題:有一對兔子,從出生後第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
}
}