Python11 递归函数

Posted thloveyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python11 递归函数相关的知识,希望对你有一定的参考价值。

递归函数

  • 理解:一个函数在内部调用自身本身,这个函数就是递归函数。
  • 优点:递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
  • 递归函数实例:
    • 阶乘
      • 代码:
        ```
        # 阶乘 -递归函数实现 : 例3的阶乘: 1 * 1 * 2 * 3
        def factorial(x):
        if not isinstance(x,(int)) or x < 0 : # 校验参数类型必须是正整数或者是0
        raise TypeError("参数x类型必须是正整数")
        elif x == 0:
        return 1 # 0的阶乘是1
        else:
        return x * factorial(x-1)
        # 分解 return x * factorial(x-1)
        # x = 3 时, 结果是 3 * factorial(3-1)(即x=2)
        # x = 2 时,结果是 2 * factorial(2-1) (即x=1)
        # x = 1 时,结果是 1 * factorial(1-1) (即x=3)
        # x = 0 时,结果是 1
        # 最后结果 3 * 2 * 1 * 1
        print(factorial(3))

        ```
      • 运行结果:
        技术图片
      • 栈溢出:在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出
        • 栈溢出实例:
          技术图片
        • 解决方法:尾递归优化尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
        • 尾递归优化实例:https://www.liaoxuefeng.com/wiki/1016959663602400/1017268131039072

以上是关于Python11 递归函数的主要内容,如果未能解决你的问题,请参考以下文章

python 基础 11 带参数装饰器与递归函数

11python 递归

Python基础day-11[内置函数(未完),递归,匿名函数]

11-递归函数

python入门16 递归函数 高阶函数

python 函数-递归函数