python - 在查找阶乘数时,无法理解在 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 行。
尽管没有任何循环,但该函数如何将给定数字下的所有数字相乘并返回我们期望的值?
解决方案
在你的脑海中执行它。例如 - 什么是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)
无条件地知道。如果没有终止的情况,那么你会得到一个无限循环的等价物——一个无限递归。
要理解递归,首先要了解递归。
推荐阅读
- html - 如何在 HTML 中插入 3d 模型
- java - 如何在 Mockito -junit 测试用例中访问本地对象
- linux - 包含另一个脚本的 Unix 内联脚本
- python - 是否有另一种方法可以从列表中删除列表?
- paypal - 相关 ID:未知的贝宝支付集成
- javascript - 如何从 reactjs 中的另一个函数调用一个函数?
- c - C中的数字频率问题,没有为大输入获得正确的频率
- oracle-apex - 将日期选择器的值设置为 sysdate 检索另一个日期
- c - realloc 调用失败并抛出 SIGABORT 信号
- python - Pandas 数据框中的经过时间