成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一個(gè)小青蛙,可以一次跳兩節(jié)樓梯,也可以一次跳一節(jié)樓梯,請(qǐng)問他如果要跳101節(jié)樓梯,一共有幾種跳法方案

fsmStudy / 977人閱讀

摘要:一個(gè)小青蛙可以一次跳兩節(jié)樓梯也可以一次跳一節(jié)樓梯請(qǐng)問他如果要跳節(jié)樓梯一共有幾種跳法方案問題的描述很簡(jiǎn)單看到這個(gè)題目的時(shí)候我首先想到的就是舉例分析一波比如當(dāng)?shù)臅r(shí)候有幾種方案當(dāng)?shù)臅r(shí)候有幾種方案等等我們首先分析一波當(dāng)?shù)臅r(shí)候這個(gè)時(shí)候小青蛙只有一種跳

一個(gè)小青蛙,可以一次跳兩節(jié)樓梯,也可以一次跳一節(jié)樓梯,請(qǐng)問他如果要跳101節(jié)樓梯,一共有幾種跳法方案?

問題的描述很簡(jiǎn)單,看到這個(gè)題目的時(shí)候,我首先想到的就是舉例分析一波,比如當(dāng)n=1的時(shí)候有幾種方案,當(dāng)n=2的時(shí)候有幾種方案等等….

我們首先分析一波,當(dāng)n=1的時(shí)候,這個(gè)時(shí)候小青蛙只有一種跳法,就是跳上臺(tái)階1,然后結(jié)束,當(dāng)然這并不能幫助我們歸納總結(jié),然后我們繼續(xù)分析
當(dāng)n=2的時(shí)候,這個(gè)時(shí)候,小青蛙可以跳上臺(tái)階1,也可以跳上臺(tái)階2結(jié)束,然后臺(tái)階1呢,也可以跳上臺(tái)階2然后結(jié)束,我們發(fā)現(xiàn),如果光靠想象的話,很難發(fā)現(xiàn)其中的規(guī)律,這個(gè)時(shí)候我們需要借助圖形來幫助我們.

下圖是我自己用筆畫的圖形,建議在這種時(shí)候還是用筆在紙上寫寫畫畫來幫助我們


靈魂畫手!!!

經(jīng)過舉例我們發(fā)現(xiàn),得到的結(jié)果組成的數(shù),特別像菲波納斯數(shù)列,從n=3開始,每一項(xiàng)都等于前兩項(xiàng)的和,為了驗(yàn)證一下我們的結(jié)論,我們可以在推導(dǎo)一下n=5的時(shí)候,一共有幾種情況,很顯然我們的結(jié)論是正確的.這就是一個(gè)求菲波納斯數(shù)列的題,那么好,這個(gè)時(shí)候有人可能會(huì)說了,菲波納斯數(shù)列是啥?能吃么?好,那我就從另外一個(gè)角度去分析這個(gè)題目

假如說,小青蛙現(xiàn)在已經(jīng)跳上了第4個(gè)臺(tái)階,那么它上一個(gè)臺(tái)階是那一個(gè)呢?要想回答這個(gè)問題,我們還需要在看一下題目的介紹,題目說,小青蛙一次只能跳一個(gè)臺(tái)階或者跳兩個(gè)臺(tái)階,那么這個(gè)答案很簡(jiǎn)單了,如果他現(xiàn)在在4,那么它的上一個(gè)臺(tái)階一定是3或者是2.
然后我們?cè)谒伎?如果他現(xiàn)在處在第3個(gè)臺(tái)階呢,那么它的上一個(gè)臺(tái)階一定是2或者是1.

那你也許會(huì)有疑問了,知道了這個(gè)他的上一個(gè)臺(tái)階有啥用呢,我給大家舉一個(gè)栗子大家就明白了
請(qǐng)問,1+1等于多少呢?如果我在問你,1+1+1的結(jié)果呢,很顯而易見,我要告訴大家的不是這個(gè)等式的結(jié)果是多少,我想告訴大家的是算的過程,我們?cè)谒愠鰜?+1之后,如果在算1+1+1,我們只需要將1+1的結(jié)果在加上1就好,反過來我們理解一下,如果你想算出來1+1+1,那我們是不是只需要算出1+1的結(jié)果呢,

類比到我們的這個(gè)算法,如果你想算出來小青蛙跳上第4個(gè)臺(tái)階一共有幾種情況,那我們只需要算出來小青蛙跳上第3個(gè)的種類加上跳上第2個(gè)臺(tái)階的種類即可歸納出來的數(shù)學(xué)公式就是f(n)=f(n-1)+f(n-2).

我們把這個(gè)思路由代碼實(shí)現(xiàn)出來,很簡(jiǎn)單,我們首先用遞歸去做.

function jump(n) {
        if (n === 1 || n=== 2) {
            return n
        }
        return jump(n - 1) + jump(n - 2)
    }

代碼很簡(jiǎn)單,但是有一個(gè)很大的問題想算出來n=101,根本算不出來,瀏覽器執(zhí)行的時(shí)間太長(zhǎng),當(dāng)然,如果你愿意等,瀏覽器還是可以算出來的.
其實(shí)這個(gè)代碼有一個(gè)很大的弊端就是,他會(huì)一直重復(fù)性的去計(jì)算,假設(shè)說我們已經(jīng)算出來f(4)了,但是當(dāng)我們?cè)谒鉬(5)的時(shí)候,這個(gè)函數(shù)又會(huì)從新去算一遍f(4),根據(jù)這個(gè)思路我們可以優(yōu)化一下,我們通過一個(gè)數(shù)組去記錄f(n),這樣就不會(huì)重復(fù)性的去計(jì)算.

function jump(n, memory = []) {
        if (n === 1 || n=== 2) {
            memory[n] = n
        }
        if (memory[n] !== undefined) {
            return memory[n]
        } else {
            memory[n] = jump(n - 1, memory) + jump(n - 2, memory)
        }
        return memory[n]
    }

改善后的代碼,可以’ 秒’算出來結(jié)果了,但是我們的追求不能止步于此,我們?cè)趦?yōu)化一下代碼,這個(gè)代碼是通過遞歸去做的,其實(shí)遞歸是很消耗性能的,我們直接通過循環(huán)去做
function jump(n) {

    let arr = [1, 2]
    for (let i = 2; i< n; i++) {
        arr [i] = arr[i - 1] + arr[i - 2]
    }
    return arr[n - 1]
}

最終我們對(duì)比通過循環(huán)代碼和優(yōu)化后的遞歸算法執(zhí)行的時(shí)間,我們計(jì)算當(dāng)n = 1000的時(shí)候的結(jié)果

結(jié)果顯而易見.

最后分享給大家一句話: 大佬不是一天練成的!!!加油,咸魚總有翻身的一天,就算翻身還是咸魚,那它也是一條會(huì)翻身的咸魚!!!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93390.html

相關(guān)文章

  • 動(dòng)態(tài)規(guī)劃入門(以爬樓梯為例)

    摘要:動(dòng)態(tài)規(guī)劃算法通常基于一個(gè)遞推公式及一個(gè)或多個(gè)初始狀態(tài)。動(dòng)態(tài)規(guī)劃有三個(gè)核心元素最優(yōu)子結(jié)構(gòu)邊界狀態(tài)轉(zhuǎn)移方程我們來看一到題目題目有一座高度是級(jí)臺(tái)階的樓梯,從下往上走,每跨一步只能向上級(jí)或者級(jí)臺(tái)階。 概念 動(dòng)態(tài)規(guī)劃(dynamic programming)是運(yùn)籌學(xué)的一個(gè)分支,是求解決策過程(decision process)最優(yōu)化的數(shù)學(xué)方法。動(dòng)態(tài)規(guī)劃算法通?;谝粋€(gè)遞推公式及一個(gè)或多個(gè)初始狀態(tài)...

    cyixlq 評(píng)論0 收藏0
  • 【刷算法】我知道的所有類似斐波那契數(shù)列的問題

    摘要:有一類算法問題類似斐波那契數(shù)列,而且解決辦法基本差不多。不了解斐波那契套路的可以看刷算法斐波那契數(shù)列跳臺(tái)階問題題目描述一只青蛙一次可以跳上級(jí)臺(tái)階,也可以跳上級(jí)。給定整數(shù),求年后牛的數(shù)量。分析設(shè)為年后牛的數(shù)量,則第年牛的來源有兩個(gè)。 有一類算法問題類似斐波那契數(shù)列,而且解決辦法基本差不多。不了解斐波那契套路的可以看【刷算法】斐波那契數(shù)列 跳臺(tái)階問題 題目描述一只青蛙一次可以跳上1級(jí)臺(tái)階,...

    NotFound 評(píng)論0 收藏0
  • 【Leetcode】70. 爬樓梯

    摘要:題目假設(shè)你正在爬樓梯。需要階你才能到達(dá)樓頂。你有多少種不同的方法可以爬到樓頂呢注意給定是一個(gè)正整數(shù)。示例輸入輸出解釋有兩種方法可以爬到樓頂。階階階階階階階題解這個(gè)題目只要模擬一下基本就能想到是,狀態(tài)方程寫出來就是斐波那契數(shù)列。 題目 假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。 每次你可以爬 1 或 2 個(gè)臺(tái)階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個(gè)正整數(shù)。 示...

    raoyi 評(píng)論0 收藏0
  • 【Leetcode】70. 爬樓梯

    摘要:題目假設(shè)你正在爬樓梯。需要階你才能到達(dá)樓頂。你有多少種不同的方法可以爬到樓頂呢注意給定是一個(gè)正整數(shù)。示例輸入輸出解釋有兩種方法可以爬到樓頂。階階階階階階階題解這個(gè)題目只要模擬一下基本就能想到是,狀態(tài)方程寫出來就是斐波那契數(shù)列。 題目 假設(shè)你正在爬樓梯。需要 n 階你才能到達(dá)樓頂。 每次你可以爬 1 或 2 個(gè)臺(tái)階。你有多少種不同的方法可以爬到樓頂呢? 注意:給定 n 是一個(gè)正整數(shù)。 示...

    187J3X1 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<