App下載

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

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

本篇文章我將和大家分享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é)果:

兔子問題打印結(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)注和支持!


0 人點贊