1

我有疑问的部分的链接。Think Python - 第 6 章,第 5 节

这段代码让我迷路了。运行时,它找到 n!,但我不知道如何。我认为我误解的部分是“recurse = factorial(n-1)”行。

def factorial(n):
    if n == 0:
        return 1
    else:
        recurse = factorial(n-1)
        result = n * recurse
        return result
  1. 这不是调用函数并将其发送回顶部吗?(显然不是,但我不知道为什么不)。

  2. 此外,在函数完成分解因子(3!到 3、2、1、1)之后,它会将它们相乘。它在哪里记住他们?

我敢肯定这很简单,但它让我难住了。

4

2 回答 2

6

这是您运行时发生的情况factorial(3)

factorial(3)
  recurse = factorial(2)
    recurse = factorial(1)
      recurse = factorial(0)
        return 1
      return 1 * 1 = 1
    return 2 * 1 = 2
  return 3 * 2 = 6

因此,在递归的每个步骤中,您都有内部步骤的返回值和n.

于 2013-07-18T22:58:04.180 回答
0

我发现Think Python中与此相关的堆栈图最有用。

阶乘(n)的堆栈图

事实上,自己重画几次确实有助于确定整个递归。

于 2014-09-09T03:04:16.873 回答