假設一段樓梯共n(n>1)個台階,小朋友一步最多能上3個台階,那么小朋友上這段樓梯一共有多少種方法
(此為京東2016年筆試題目)
假設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=15、14、13、...、5、4。然后就是確定這個遞歸公式的結束條件了,
第一個台階只有1種上法,第二個台階有2種上法(一步邁2個台階上去、一步邁1個台階分兩步上去),第三個台階有4種上法
代碼如下
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)
截圖如下
(來讓小朋友把這些走法挨個走一遍......)
這里提一下上面的
c, b, a = a+b+c, c, b
這段代碼的用法
這段代碼是先計算右邊的數值,先計算a + b + c
然后從右邊開始先將b的值賦給a,再將c的值賦給b,最后將a + b + c的值賦給c
這段代碼等價於
m = a + b +c
a = b
b = c
c = m
(其實我還是喜歡下面這樣寫,容易懂)