![]() |
1
2
这里有一个关于递归正在做什么的口头描述,太详细了:
递归“知道”在哪里停止,因为它最终到达一个点,它只返回数字1,而不是返回依赖于另一个调用
除了
是的,但是你的
试着不要认为这是因为有一个“计数器”在某种程度上跟踪函数何时应该停止递归,或者有一个“触发器”在主动地停止递归——这是一个误导性的看待它的方法。函数的每个实例只知道它接收到什么输入,以及它想要返回什么。大多数情况下,它想要返回的是包含对同一个函数的调用,这就是递归的来源;当它想要返回的时候 不 涉及函数调用,递归结束。 对于这个特定的函数,对于除1之外的任何输入,它都使用输入n-1调用自身的新实例(并在返回到其父调用方之前等待结果),因此递归继续进行。对于1的输入,它不调用自身,因此递归结束。“else”块是您的“触发器”(不过,这也是一种误导性的思考方式;它不是“触发”任何东西,它只是返回一个数字,而不是调用一个函数来返回其结果。)
|
|
goofy126 · 计算理论-DFA[闭合] 7 年前 |
![]() |
Marcos · 是否有一个术语来描述只应使用最后一个值的表格? 7 年前 |
|
ZhaiNan · 这能在O(N log(N))时间内解决3SUM吗? 7 年前 |
![]() |
Kishore · 如何证明(g(n))=O(g(n))(g(n)) 7 年前 |
![]() |
NaSh · 求图中局部最小值/最大值的爬山算法的时间复杂度 9 年前 |
![]() |
magic-sudo · 排序arrya的最有效方法[已关闭] 10 年前 |
![]() |
Dan Drews · 为什么替身能像他们那样工作 11 年前 |