上周学校刚好开设了Python课,正好对Python的学习做一个归纳总结。这是老师布置的第一个项目:
假设一个孩子在爬楼梯,每次可以爬一个或者两个楼梯,一共有多少个方法能爬上去呢?
n为整数 1<=n<=2200
可以看出来的是,该题可以用斐波那契数列解决。
楼梯一共有n层,每次只能走1层或者2层,而要走到最终的n层。不是从n-1或者就是n-2来的。
F(1) = 1
F(2) = 2
F(n) = F(n-1) + F(n-2) (n>=3)
方法一:使用递归函数
def runupstairs(t, n):
if n == 1:
return 1
if n == 2:
return 2
else:
return t.runupstairs[n - 1] + t.runupstaris[n -2]
这是递归写法,但是会导致栈溢出。在计算机中,函数的调用是通过栈进行实现的,如果递归调用的次数过多,就会导致栈溢出。
针对这种情况就要使用方法二,改成非递归函数。
方法二:
def runupstairs(t, n):
if n == 1:
return 1
if n == 2:
return 2
argu = [1, 2]
for i in range(2, n):
argu.append(argu.append[-1] + argu.append[-2])
return argu[-1]
将递归进行改写,实现循环就不会导致栈溢出