java基礎演算法最佳化解決兔子數量以及拓展

來源:互聯網
上載者:User
package javaBlog;/*古典問題:3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少。分析:首先我們要明白題目的意思指的是每個月的兔子總對數;假設將兔子分為小中大三種,兔子從出生後三個月後每個月就會生出一對兔子,那麼我們假定第一個月的兔子為小兔子,第二個月為中兔子,第三個月之後就為大兔子,那麼第一個月分別有1、0、0,第二個月分別為0、1、0,第三個月分別為1、0、1,第四個月分別為,1、1、1,第五個月分別為2、1、2,第六個月分別為3、2、3,第七個月分別為5、3、5……兔子總數分別為:1、1、2、3、5、8、13…… 於是得出了一個規律,從第三個月起,後面的兔子總數都等於前面兩個月的兔子總數之和,即為斐波那契數列。*/public class RabbitNumber {    private long rabbits = 1;    private long lastSecondRabbits ,lastRabbits;    /**     * 遍曆從第一個月到第n個月的兔子總數     * */    public void forEachMothsToRabbits(int moths){        System.out.println(System.currentTimeMillis());        for (int i = 1;i<= moths;i++) System.out.println("第"+i+"個月兔子數為"+getRabbits(i));        System.out.println(System.currentTimeMillis());    }    /**     * 擷取當前月的兔子總數     * */    private long getRabbits(int moths){        if (moths == 1 || moths==2 ) return rabbits=1;        else if (moths == 3) return rabbits = 2;        else{            //初始化上一個月以及上兩個月兔子數量            if (lastRabbits == 0 && lastSecondRabbits ==0 ){                lastSecondRabbits = getRabbits(moths-2);                lastRabbits = getRabbits(moths-1);            }            //計算這一個返回的兔子數量            rabbits= lastRabbits+lastSecondRabbits;            /*讓兩個月的兔子數等於上一個月兔子數,讓上個月等於這個月兔子數            為了下一次計算(下月兔子數)更加高效快捷避免過冗餘遞迴影響計算速率*/            lastSecondRabbits = lastRabbits;            lastRabbits = rabbits;            return rabbits ;        }    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.