解答牛頓爬樓梯問題

2021-10-02 12:30:38 字數 1428 閱讀 9673

今天面試遇到了這個題,腦子軸了一下, 沒有答上來, 事後想了想, 其實也是蠻簡單的問題

牛頓爬樓梯.png

爬樓梯一次只能邁一節或二節台階. 假設一共n節台階. 那麼一共有多少種方法呢?

分析問題的關鍵: 最後一步邁了幾個格仔?

如果最後一步邁了乙個格仔: 前面所有步法的數量為f(n-1)

如果最後一步邁了兩個格仔: 前面所有步法的數量為f(n-2)

"""

乙個人一次可以邁過一節樓梯, 或者兩節樓梯

問 n節樓梯有多少種走法?

分析:

1節樓梯有1種走法

2節樓梯有2種走法

3節樓梯的走法數量 = 2節樓梯的走法數量(最後一次走一步的數量) + 1節樓梯的走法數量(最後一次走兩步的數量)

n節樓梯的走法數量 = n-1 節樓梯的走法數量 + n-2節樓梯的走法數量

f(n) = f(n-1) + f(n-2)

"""def take_1_2_stairs(n):

if n == 1:

return 1

if n == 2:

return 2

return take_1_2_stairs(n-1) + take_1_2_stairs(n-2)

"""f(n) = f(n-1) + f(n-2) + f(n-3)

"""# 如果最多能邁三節

def take_1_2_3_stairs(n):

if n == 1:

return 1

if n == 2:

return 2

if n == 3:

return 4

return take_1_2_3_stairs(n-1) + take_1_2_3_stairs(n-2) + take_1_2_3_stairs(n-3)

def main():

result_1_2 = take_1_2_stairs(10)

result_1_2_3 = take_1_2_3_stairs(10)

print("如果每次邁出1-2個台階, 共有",result_1_2, "種解法")

print("如果每次邁出1-3個台階,共有", result_1_2_3, "種走法")

if __name__ == '__main__':

main()

這裡用到了類似斐波那契的遞推, 但實際上每次的結果取決於上一次儲存的狀態,是動態規劃法的一種表現形式

爬樓梯問題

ok,前段時間在一篇blog上看到乙個關於樓梯的面試題,大概內容如下 現有乙個人,規定他上樓梯時只能一步走乙個台階或者兩個台階。要求 給定任意樓梯的階數,求共有多少種方法爬完樓梯。如果有經驗可以看出,這是一道遞迴的題目。不過這個遞迴 程式怎麼寫呢?我的思路是可以這樣想,不管他前面 怎麼爬,最後總是要...

爬樓梯問題

爬樓梯問題,每次可以走1步或者2步,爬上n層樓梯的總方法,這題就是乙個變相的fibonacci問題。當n 1時,有1種方法,即直接走1步 當n 2時,有2方法 連續走2步,或直接走兩步 對於n,設f n 為總方法,則 f n f n 1 f n 2 ps f n 1 即第一次走一步的走法,f n 2...

爬樓梯問題

蒜頭君自從春節回來以後,體重就像加了特技一樣duang duang 地暴增起來。於是小蒜頭打算每天爬樓梯來燃燒體內的脂肪 咦?蒜怎麼會有脂肪 蒜頭在爬樓梯的時候腦洞大開,因為蒜頭腿短,爬樓梯的時候一次只能邁1級或2級台階,它就想到了,假如一共有n級台階的話,它一共有多少種方法能夠爬到樓梯頂部呢?聰明...