假設一段樓梯共n(n>1)個臺階,小朋友一步最多能上3個臺階,那麼小朋友上這段樓梯一共有多少種方法spa
(此爲京東2016年筆試題目)3d
假設n爲15,從第15個臺階上往回看,有3種方法能夠上來(從第14個臺階上一步邁1個臺階上來,從第13個臺階上一步邁2個臺階上來,從第12個臺階上一步邁3個臺階上來),
同理,第14個、13個、12個臺階均可以這樣推算,從而獲得公式f(n) = f(n-1) + f(n-2) + f(n-3),其中n=1五、1四、1三、...、五、4。而後就是肯定這個遞歸公式的結束條件了,
第一個臺階只有1種上法,第二個臺階有2種上法(一步邁2個臺階上去、一步邁1個臺階分兩步上去),第三個臺階有4種上法blog
代碼以下遞歸
n = int(input())
a = 1
b = 2
c = 4
for i in range(n-3):
c, b, a = a+b+c, c, b
print(c)
input
截圖以下方法
(來讓小朋友把這些走法挨個走一遍......)im
這裏提一下上面的筆試
c, b, a = a+b+c, c, bimg
這段代碼的用法截圖
這段代碼是先計算右邊的數值,先計算a + b + c
而後從右邊開始先將b的值賦給a,再將c的值賦給b,最後將a + b + c的值賦給c
這段代碼等價於
m = a + b +c
a = b
b = c
c = m
(其實我仍是喜歡下面這樣寫,容易懂)