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次!

  • 相关阅读:
    数组
    分支.顺序结构
    博客作业-查找
    DS博客作业-图
    DS 数据结构-树
    数据结构-栈,队列
    博客作业05-指针
    C语言博客作业04-数组
    C语言博客作业03——函数
    c语言博客作业02-循环结构
  • 原文地址:https://www.cnblogs.com/zzliu/p/10652211.html
Copyright © 2011-2022 走看看