Python算法-爬楼梯与递归函数

上周学校刚好开设了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]

将递归进行改写,实现循环就不会导致栈溢出

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容