本篇文章我將和大家分享Java遞歸應(yīng)用中一個經(jīng)典問題,斐波那契數(shù)列兔子問題。相信很多初學(xué)遞歸的小伙伴,遇到這個問題都會有一些暈頭轉(zhuǎn)向的。下面,我將為大家詳細講解Java中關(guān)于兔子問題的遞歸應(yīng)用。
一、題目介紹
題目內(nèi)容:
現(xiàn)在有一對小兔子,它們需要三個月的時間才能長成大兔子,同時還會產(chǎn)下一對小兔子。假設(shè)兔子們都不會死,那么請問,在三年后,一共會有多少只兔子呢?
題目分析:
許多小伙伴看到這樣的題目,估計已經(jīng)開始暈頭轉(zhuǎn)向了。不用著急,接下來我們先慢慢分析一下這個問題,找到問題里面所在的規(guī)律。
第1個月 1 0 0 1對兔子 2只兔子
第2個月 0 1 0 1對兔子 2只兔子
第3個月 1 0 1 2對兔子 4只兔子
第4個月 1 1 1 3對兔子 6只兔子
第5個月 2 1 2 5對兔子 10只兔子
第6個月 3 2 3 8對兔子 16只兔子
第7個月 5 3 5 13對兔子 26只兔子
第8個月 8 5 8 21對兔子 42只兔子
……
看到這里,不知道小伙伴們有沒有發(fā)現(xiàn)里面規(guī)律?
從第三個月開始,兔子的總對數(shù)是前面兩個月的總和。
3月 1月的數(shù)量+2月的數(shù)量 1+1 2
4月 2月的數(shù)量+3月的數(shù)量 1+2 3
5月 3月的數(shù)量+4月的數(shù)量 2+3 5
可以得到這樣一個數(shù)學(xué)公式? sum = n(x-1)+n(x-2)[x>2];
?
二、代碼展示
題目要求是三年后,一共有多只兔子。因此,先聲明一個36位的數(shù)組,用來遍歷。
因為第一個月和第二個月都只有一對兩只,因此加入判斷,如果是第一個月或者第二個月,那么加入相應(yīng)位置的數(shù)值是1.
繼續(xù)判斷第三個月后,開始進行前兩個月的累加。具體代碼如下:
public class Demo01 {
/**
* 經(jīng)典兔子問題
* 遞歸 斐波那契數(shù)列
* */
public static void main(String[] args) {
int i;
int[] arr=new int[36];
for(i=0;i<arr.length;i++){
if(i==0 || i==1){
arr[i] = 1;
System.out.println("第"+(i+1)+"個月有"+2*arr[i]+"只兔子");
}else{
arr[i] = arr[i-1] + arr[i-2];
System.out.println("第"+(i+1)+"個月有"+2*arr[i]+"只兔子");
}
}
}
}
打印結(jié)果:
可以看到,我們最后得到的數(shù)量可以說是非常之龐大。這里要說一個,就是遞歸雖好,代碼少,簡單直觀。但是在項目中不建議使用,如果遞歸的深度太深了,會導(dǎo)致系統(tǒng)崩潰的。
三、總結(jié)
以上就是關(guān)于 Java 遞歸實現(xiàn)斐波那契數(shù)列,經(jīng)典兔子問題的全部內(nèi)容,想要了解更多關(guān)于 Java 遞歸的其他內(nèi)容,可以搜索W3Cschool中相關(guān)技術(shù)文章閱讀,也希望大家能夠多多關(guān)注和支持!