/*
*不死神兔 月月生問題
- 假設(shè)一對剛出生的小兔一個月后會長成大兔,再過一個月就會生下一對小兔,并且此后每個月都會生下一對兔子
- 問:一對剛出生的兔子毅臊,一年內(nèi)可以繁殖成多少對兔子
- 兩種解題思路:
- ①利用數(shù)組
- ②遞歸計算
*/
/*
*不死神兔 月月生問題
* 假設(shè)一對剛出生的小兔一個月后會長成大兔药薯,再過一個月就會生下一對小兔,并且此后每個月都會生下一對兔子
* 問:一對剛出生的兔子敞贡,一年內(nèi)可以繁殖成多少對兔子
* 兩種解題思路:
* ①利用數(shù)組
* ②遞歸計算
*/
public class rabbitTest01 {
public static void main(String[] args){
// ①利用數(shù)組(7行代碼搞定)
getRabbitNum01();
//②遞歸計算(2行代碼搞定)
//1.定義一個數(shù)組,數(shù)組大小意味著第幾個月的兔子數(shù)量
int numRabbit =12;
int[] arr =new int[numRabbit];
//2.利用遞歸輸出,核心是:fun(num) =fun(num-2)+fun(num-1);
for (int i = 0; i <arr.length ; i++) {
System.out.println("第"+(i+1)+"個月的兔子數(shù)量是"+getNum(i+1)+"只");
}
}
public static int getNum(int i){//利用三元運算符使代碼更簡潔
return (i ==1||i ==2) ? 1 :(getNum(i-2)+getNum(i-1));
}
/*下面小測試的答案在這里:
第10個月————21對大兔子生下21對小兔子
————————13對小兔子長成13對大兔子 ——共55對(42+13)
你做對了么?對了就請點個喜歡吧~~~
*/
public static void getRabbitNum01() {
//1.定義一個數(shù)組摄职,數(shù)組大小意味著第幾個月的兔子數(shù)量
int numRabbit =12;
int[] arr =new int[numRabbit];
//2.初始化第一和第二個元素為1
arr[0]=arr[1]=1;
//3.遍歷一下這個數(shù)組誊役,也就是讓每個月都有個兔子總數(shù)值
for (int i = 2; i <arr.length ; i++) {
arr[i] = arr[i-2] +arr[i-1];
}
//4.選擇輸出每個月份的兔子總數(shù),直觀清晰
for (int i = 0; i <arr.length ; i++) {
System.out.println("第"+(i+1)+"個月的兔子數(shù)量是"+arr[i]+"只");
}
}
}
總結(jié):
規(guī)律掌握如下谷市,一點點理解蛔垢,這個不會太難。
月份——————兔子生長情況——————兔子當(dāng)月總對數(shù)
第1個月————1對小兔子———————— 共1對
第2個月————1對大兔子———————— 共1對
第3個月————1對大兔子生下1對小兔子——共2對(1+1)
第4個月————1對大兔子生下1對小兔子
————————1對小兔子長成1對大兔子 ——共3對(1+2)
第5個月————2對大兔子生下2對小兔子
————————1對小兔子長成1對大兔子 ——共5對(2+3)
第6個月————3對大兔子生下3對小兔子
————————2對小兔子長成2對大兔子 ——共8對(6+2)
第7個月————5對大兔子生下5對小兔子
————————3對小兔子長成3對大兔子 ——共13對(10+3)
第8個月————8對大兔子生下8對小兔子
————————5對小兔子長成5對大兔子 ——共21對(16+5)
第9個月————13對大兔子生下13對小兔子
————————8對小兔子長成8對大兔子 ——共34對(26+8)
小測試:看你懂了沒迫悠?
第10個月————啦桌?對大兔子生下?對小兔子
————————及皂?對小兔子長成甫男?對大兔子 ——共?對(验烧?+板驳?)
答案藏在本篇文章中,聰明人10秒鐘內(nèi)應(yīng)該能看到碍拆。
或者若治,自己把代碼敲一遍,結(jié)果自然明白感混。