App下載

Java遞歸之斐波那契數(shù)列 經(jīng)典兔子問(wèn)題

猿友 2021-07-29 15:29:43 瀏覽數(shù) (3293)
反饋

本篇文章我將和大家分享Java遞歸應(yīng)用中一個(gè)經(jīng)典問(wèn)題,斐波那契數(shù)列兔子問(wèn)題。相信很多初學(xué)遞歸的小伙伴,遇到這個(gè)問(wèn)題都會(huì)有一些暈頭轉(zhuǎn)向的。下面,我將為大家詳細(xì)講解Java中關(guān)于兔子問(wèn)題的遞歸應(yīng)用。

一、題目介紹

題目?jī)?nèi)容:

現(xiàn)在有一對(duì)小兔子,它們需要三個(gè)月的時(shí)間才能長(zhǎng)成大兔子,同時(shí)還會(huì)產(chǎn)下一對(duì)小兔子。假設(shè)兔子們都不會(huì)死,那么請(qǐng)問(wèn),在三年后,一共會(huì)有多少只兔子呢?

題目分析:

許多小伙伴看到這樣的題目,估計(jì)已經(jīng)開(kāi)始暈頭轉(zhuǎn)向了。不用著急,接下來(lái)我們先慢慢分析一下這個(gè)問(wèn)題,找到問(wèn)題里面所在的規(guī)律。

第1個(gè)月    1 0 0    1對(duì)兔子    2只兔子

第2個(gè)月    0 1 0    1對(duì)兔子    2只兔子

第3個(gè)月    1 0 1    2對(duì)兔子    4只兔子

第4個(gè)月    1 1 1    3對(duì)兔子    6只兔子

第5個(gè)月    2 1 2    5對(duì)兔子    10只兔子

第6個(gè)月    3 2 3    8對(duì)兔子    16只兔子

第7個(gè)月    5 3 5    13對(duì)兔子    26只兔子

第8個(gè)月    8 5 8    21對(duì)兔子    42只兔子

……

看到這里,不知道小伙伴們有沒(méi)有發(fā)現(xiàn)里面規(guī)律?

從第三個(gè)月開(kāi)始,兔子的總對(duì)數(shù)是前面兩個(gè)月的總和。

3月    1月的數(shù)量+2月的數(shù)量    1+1    2

4月    2月的數(shù)量+3月的數(shù)量    1+2    3

5月    3月的數(shù)量+4月的數(shù)量    2+3    5


可以得到這樣一個(gè)數(shù)學(xué)公式? sum = n(x-1)+n(x-2)[x>2];?

二、代碼展示

題目要求是三年后,一共有多只兔子。因此,先聲明一個(gè)36位的數(shù)組,用來(lái)遍歷。

因?yàn)榈谝粋€(gè)月和第二個(gè)月都只有一對(duì)兩只,因此加入判斷,如果是第一個(gè)月或者第二個(gè)月,那么加入相應(yīng)位置的數(shù)值是1.

繼續(xù)判斷第三個(gè)月后,開(kāi)始進(jìn)行前兩個(gè)月的累加。具體代碼如下:

public class Demo01 {

    /**
     * 經(jīng)典兔子問(wèn)題
     * 遞歸 斐波那契數(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)+"個(gè)月有"+2*arr[i]+"只兔子");
            }else{
                arr[i] = arr[i-1] + arr[i-2];
                System.out.println("第"+(i+1)+"個(gè)月有"+2*arr[i]+"只兔子");
            }
        }
    }
}

打印結(jié)果:

兔子問(wèn)題打印結(jié)果

可以看到,我們最后得到的數(shù)量可以說(shuō)是非常之龐大。這里要說(shuō)一個(gè),就是遞歸雖好,代碼少,簡(jiǎn)單直觀。但是在項(xiàng)目中不建議使用,如果遞歸的深度太深了,會(huì)導(dǎo)致系統(tǒng)崩潰的。

三、總結(jié)

以上就是關(guān)于 Java 遞歸實(shí)現(xiàn)斐波那契數(shù)列,經(jīng)典兔子問(wèn)題的全部?jī)?nèi)容,想要了解更多關(guān)于 Java 遞歸的其他內(nèi)容,可以搜索W3Cschool中相關(guān)技術(shù)文章閱讀,也希望大家能夠多多關(guān)注和支持!


0 人點(diǎn)贊