小青蛙跳臺階

題目描述

一只青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法(先后次序不同算不同的結(jié)果)。

這題其實有點像fib數(shù)列,用遞歸寫的

遞歸寫法

def jumpFloor(number):
    if number <= 0:
        return 0
    if number in [1,2]:
        return number
    return jumpFloor(number - 2) + jumpFloor(number - 1)

很可惜 雖然想了出來但是并沒有通過。

運(yùn)行超時:您的程序未能在規(guī)定時間內(nèi)運(yùn)行結(jié)束,請檢查是否循環(huán)有錯或算法復(fù)雜度過大


好吧,用遞歸寫的那一刻我就該意識到這一點

尾遞歸寫法

def jumpFloor(number, curr = 2, last = 1):
    if number == 0:
        return 0
    if number == 1:
        return 1
    if number == 2:    #這里是if,如果是else也會出錯
        return curr    #這里是返回curr,返回2會出錯
    return jumpFloor(number - 1, curr + last, curr)

尾遞歸我吃了好多坑,倒數(shù)第二行返回2我簡直是腦抽,因為number最終肯定會變成2,那么不管怎么樣輸出的結(jié)果都是2;

在這個代碼里,最后的出口并不是最下面的

return jumpFloor(number - 1, curr + last, curr)

而是代碼上面那個判斷條件

    if number == 2:    #這里是if,如果是else也會出錯
        return curr    #這里是返回curr,返回2會出錯

所return的是curr,而并不是靠上級領(lǐng)導(dǎo)等下屬都忙完了再來添上一筆,這點和遞歸很不一樣。

關(guān)于第三個if可以為curr,那么第二個if是否可以也改成last呢,其實無影響,因為number根本就不可能到為1的時候。

關(guān)于倒數(shù)第3行為什么不能改else,這里有個例子

def f(n):
    if n == 0:
        print(0)
    if n == 1:
        print(1)
    else:
        print(2)

if __name__ == '__main__':
    f(0)

輸出結(jié)果為

0
2

這里看下來,會一順溜的打印下來,結(jié)果就不唯一了

還有個情況

def f(n):
    if n == 1:
        return 1
    else:
        return 2
    if n == 0:   #這句他媽逼甚至都不會被管
        return 0

if __name__ == '__main__':
    print(f(0))

在Pycharm里,寫標(biāo)示的下面都是亮黃燈,else下面的if語句甚至不會再執(zhí)行。

總結(jié):有多個if的情況下就不要再用else

雖然編譯通過了 但是還是想試試其他寫法

動態(tài)規(guī)劃

pass

學(xué)到我再補(bǔ)8

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,264評論 0 38
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,878評論 1 45
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,384評論 0 17
  • 下周三就是初三期末考試了。今天下午放學(xué)時,學(xué)生拿到了總共34張復(fù)習(xí)卷,其中最多的是英語,一共發(fā)了十六張考卷。即便不...
    塵緣心語閱讀 245評論 0 0
  • 前幾天看QQ空間,發(fā)現(xiàn)了一位同學(xué)用思維導(dǎo)圖就是他們寢室的夜談會生活——其紀(jì)錄速度這種思想都是極其令人佩服的。 ...
    忽爾今至閱讀 294評論 0 0

友情鏈接更多精彩內(nèi)容