📅  最后修改于: 2020-09-19 14:57:11             🧑  作者: Mango
递归是根据自身定义某些内容的过程。
一个物理世界的例子是放置两个相互面对的平行反射镜。它们之间的任何对象都将递归地反映出来。
在Python,我们知道一个函数可以调用其他函数。 函数甚至可能会自行调用。这些类型的构造称为递归函数。
下图显示了称为recurse
的递归函数的工作。
以下是查找整数的阶乘的递归函数的示例。
数字的阶乘是从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 "", line 3, in
File "", line 2, in a
File "", line 2, in a
File "", line 2, in a
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded