# 1.樓梯有n個台階,上樓可以一步上1階,也可以一步上2階,一共有多少種上樓的方法? # 斐波那契數列 第一項為1 第二項為2 也就是f(n)=f(n-1)+f(n-2),用遞歸求。 # 給個分析的例子: # 有一個11級的台階,一個人可走一步也可走兩步,問這個人有多少種方法走完這個台階? # 解: # ①只用一步走:1+1+1+1+1+1+1+1+1+1+1=11,共11步,只有C11,1=1種走法。 # ②用了一次兩步走:1+1+1+1+1+1+1+1+1+2=11,共10步,有C10,1 =10種走法。 # ③用了兩次兩步走:1+1+1+1+1+1+1+2+2=11,共9步,有C9,2 =36種走法。 # ④用了三次兩步走:1+1+1+1+1+2+2+2=11,共8步,有C8,3= 56種走法。 # ⑤用了四次兩步走:1+1+1+2+2+2+2=11,共7步,有C7,4=35種走法。 # ⑥用了五次兩步走:1+2+2+2+2+2=11,共6步,有C6,1=6種走法。 # 總共有1+10+36+56+35+6=144種 # 理論上分析:只有一個台階的話,只有1種走法,2級台階的話,可以一步一個台階走,也可以一步2個台階走,共有2種走法。 # 當台階數大於等於3之后,可以這么分析:如果最后一步走一個台階,那么就是n-1個台階的走法的種類,如果最后一步走兩個台階,那么就是n-2個台階的走法的種類,所以n個台階的走法種類就是n-1個台階和n-2個台階的走法的總和。因此,這是一個遞歸函數。也是一個裴波那契函數。
def step(n): if n == 1: return 1 if n == 2: return 2 else: return step(n-1)+step(n-2) print(step(6))
# 斐波那契數列
# 1,2,3,5,8,13,,,,,,,
def step(n):
a,b = 1,1
while n > 1:
a,b = b,a+b # b = a + b 中的 a 還是原來的a,並不是把b賦值給a后的a
n -= 1
return b
print(step(6))
# 1. 樓梯有n個台階,上樓可以一步上1階,也可以一步上2階,也可以一步上3階,一共有多少種上樓的方法? # 給個分析的例子: # 有一個6級的台階,一個人可走一步也可走兩步也可走三步,問這個人有多少種方法走完這個台階? # 解: # ①只用一步走:1+1+1+1+1+1=6,共6步,只有1種走法。 # ②用了一次兩步走:1+1+1+1+2=6,共5步,有C5,1 =5種走法。 # ③用了兩次兩步走:1+1+2+2=6,共4步,有C4,2 =6種走法。 # ④用了三次兩步走:2+2+2=6,共3步,有1種走法。 # ⑤用了一次三步走:1+1+1+3=11,共4步,有C4,1=4種走法。 # ⑥用了兩次三步走:3+3=6,共2步,有1種走法。 # ⑥用了一次兩步和一次三步走:有6種走法。 # 總共有1+5+6+1+4+1+6=24種 # 理論上分析:只有一個台階的話,只有1種走法, # 2級台階的話,可以一步一個台階走,也可以一步2個台階走,共有2種走法。 # 3級台階的話,可以一步一個台階走,也可以一步3個台階走,共有4種走法。 # 當台階數大於等於4之后,可以這么分析:如果最后一步走一個台階,那么就是n-1個台階的走法的種類,如果最后一步走兩個台階,那么就是n-2個台階的走法的種類,如果最后一步走三個台階,那么就是n-3個台階的走法的種類,所以n個台階的走法種類就是n-1個台階和n-2個台階和n-3個台階的走法的總和。因此,這是一個遞歸函數。
def step(n): if n == 1: return 1 if n == 2: return 2 if n == 3: return 4 else: return step(n-1)+step(n-2)+step(n-3) print(step(6))
# 0,1,1,2,4,7,13,24
def step(n):
a,b,c = 0,1,1
while n > 1:
a,b,c = b,c,a+b+c # c = a + b + c 中的 a,b 還是原來的a,b,並不是把b,c賦值給a,b后的a,b
n -= 1
return c
print(step(4))