原文: https://thepythonguru.com/python-recursive-functions/


    于 2020 年 1 月 7 日更新


    函数本身调用时称为递归。 递归的工作原理类似于循环,但有时使用递归比循环更有意义。 您可以将任何循环转换为递归。

    这是递归的工作方式。 递归函数会自行调用。 如您所料,如果不因某种条件而停止,则此过程将无限期重复。 此条件称为基本条件。 每个递归程序中都必须有一个基本条件,否则它将像无限循环一样永远继续执行。

    递归函数的工作原理概述:

    1. 递归函数由一些外部代码调用。
    2. 如果满足基本条件,则程序执行有意义的操作并退出。
    3. 否则,函数将执行一些必需的处理,然后调用自身以继续递归。 这是用于计算阶乘的递归函数的示例。

    阶乘由数字表示,后跟(!)符号,即4!

    例如:

    1. 4! = 4 * 3 * 2 * 1
    2. 2! = 2 * 1
    3. 0! = 1

    这是一个例子

    1. def fact(n):
    2. if n == 0:
    3. return 1
    4. else:
    5. return n * fact(n-1)
    6. print(fact(0))
    7. print(fact(5))

    预期输出

    1. 1
    2. 120
    1. def fact(n):
    2. if n == 0:
    3. return 1
    4. else:
    5. return n * fact(n-1)
    6. print(fact(0))
    7. print(fact(5))

    现在尝试执行上述函数:

    1. print(fact(2000))

    你会得到:

    1. RuntimeError: maximum recursion depth exceeded in comparison

    发生这种情况是因为默认情况下 python 在1000调用之后停止了调用递归函数。 若要更改此行为,您需要按如下所示修改代码。

    1. import sys
    2. sys.setrecursionlimit(3000)
    3. def fact(n):
    4. if n == 0:
    5. return 1
    6. else:
    7. return n * fact(n-1)
    8. print(fact(2000))
    1. import sys
    2. sys.setrecursionlimit(3000)
    3. def fact(n):
    4. if n == 0:
    5. return 1
    6. else:
    7. return n * fact(n-1)
    8. print(fact(2000))