zoukankan      html  css  js  c++  java
  • 台阶问题

    问题

    你要上一段楼梯,每次只能上一步或两步,对于n级台阶,一共有多少种上台阶的方法


    ## 分析 加入我们知道走到n-2级和n-1级台阶有多少种方法,那么我们就知道走到n级台阶有多少种方法 ```python f(n) = f(n-1) + f(n-2)
    看到这里,大家应该就知道了可以使用递归来解决这个问题,那么递归的出口在哪里呢,对于1级台阶,f(1)=1,对于2级台阶,f(2)=2,因此我们得到呢递归的出口
    ```python
    f(1) = 1
    f(2) = 2
    
    

    ## 实现 ```python def func(n): if n == 1: return 1 if n == 2: return 2 else: return func(n-1) + func(n-2)
    
    给此函数加一个装饰器,计算函数递归调用的次数
    ```python
    def call_num(func):
        """
        此装饰器函数用于计算函数调用次数
        :param func:
        :return:
        """
        num = 0
    
        def inner(*args, **kwargs):
            nonlocal num
            ret = func(*args, **kwargs)
            num += 1
            print("function called number:", num)
            return ret
        return inner
    
    
    @call_num
    def func(n):
        if n == 1:
            return 1
        if n == 2:
            return 2
        else:
            return func(n-1) + func(n-2)
    
    
    

    print(func(30))
    
    

    运行结果

    function called number: 1664079
    1346269
    
    

    当n=30时,递归次数居然高达1664079次!

  • 相关阅读:
    asp.net微信开发第八篇----永久素材管理
    selenium模块
    request模块
    爬虫基本概念
    反向生成url
    admin的路由系统剖析
    popup方法
    ModelForm
    Django数据库操作性能相关
    缓存
  • 原文地址:https://www.cnblogs.com/zzliu/p/10652211.html
Copyright © 2011-2022 走看看