1. 首页
  2. 技术文章

17、Python递归

在本教程中,您将学习创建一个递归函数(一个调用自身的函数)。

什么是递归?

递归是根据自身定义某些内容的过程。

一个物理世界的例子是放置两个相互面对的平行反射镜。它们之间的任何对象都将递归地反映出来。


Python递归函数

在Python中,我们知道一个函数可以调用其他函数。函数甚至可能会自行调用。这些类型的构造称为递归函数。

下图显示了名为的递归函数的工作recurse

Python递归函数
Python中的递归函数

以下是查找整数的阶乘的递归函数的示例。

数字的阶乘是从1到该数字的所有整数的乘积。例如,阶乘6(表示为6!)是1 * 2 * 3 * 4 * 5 * 6 = 720

递归函数示例

def factorial(x):
    """This is a recursive function
    to find the factorial of an integer"""

    if x == 1:
        return 1
    else:
        return (x * factorial(x-1))


num = 3
print("The factorial of", num, "is", factorial(num))

输出

The factorial of 3 is 6

在上面的示例中,factorial()是一个递归函数,因为它调用了它自己。

当我们使用正整数调用此函数时,它将通过减少数量来递归调用自身。

每个函数将数字乘以其下面的数字的阶乘,直到等于1。可以在以下步骤中解释此递归调用。

factorial(3)          # 1st call with 3
3 * factorial(2)      # 2nd call with 2
3 * 2 * factorial(1)  # 3rd call with 1
3 * 2 * 1             # return from 3rd call as number=1
3 * 2                 # return from 2nd call
6                     # return from 1st call

让我们看一下显示发生了什么的逐步过程的图像:

递归方法的阶乘
递归阶乘函数的工作

当数字减少到1时,递归结束。这称为基本条件。

每个递归函数必须具有停止递归的基本条件,否则该函数将无限调用自身。

Python解释器限制了递归的深度,以帮助避免无限递归,从而导致堆栈溢出。

默认情况下,最大递归深度为 1000。如果超出限制,则结果为RecursionError。让我们看一个这样的条件。

def recursor():
    recursor()
recursor()

输出

Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "<string>", line 2, in a
  File "<string>", line 2, in a
  File "<string>", line 2, in a
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

递归的优点

  1. 递归函数使代码看起来干净整洁。
  2. 递归序列生成比使用嵌套嵌套迭代更容易。

递归的缺点

  1. 有时,递归背后的逻辑很难遵循。
  2. 递归调用很昂贵(效率低​​),因为它们占用大量内存和时间。
  3. 递归函数很难调试。
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code