首页 > 解决方案 > 在查找阶乘数时,无法理解在 python 中没有循环函数的函数是如何循环的

问题描述

def factorial(num):
    if num == 0:
        return 1
    return num * factorial(num-1)

print('Enter an integer')
num = int(input())
print(factorial(num)

如果我输入数字4,输出是24

在上面的代码块中,我无法理解第 4 行。

尽管没有任何循环,但该函数如何将给定数字下的所有数字相乘并返回我们期望的值?

标签: pythonrecursionfactorial

解决方案


在你的脑海中执行它。例如 - 什么是factorial(2)?2 不是 0,所以是2 * factorial(1)。现在是什么factorial(1)?1 仍然不是 0,所以它是1 * factorial(0)。是什么factorial(0)?现在 0 是 0,所以我们知道它是 1。现在回过头来补上我们缺失的部分:如果factorial(0)是 1,那么factorial(1)1 * 1,那么factorial(2)2 * 1 * 1

使用递归,有一个已知的基本(或终止)情况,所有其他情况都简化为接近基本情况的更简单问题。factorial(24)只有你知道,factorial(23)你才知道,你factorial(23)只有通过知道才知道factorial(22)……但你factorial(0)无条件地知道。如果没有终止的情况,那么你会得到一个无限循环的等价物——一个无限递归。

要理解递归,首先要了解递归。


推荐阅读