您能解释一下此递归函数吗?

时间:2019-08-25 08:27:28

标签: python recursion

我最近碰到一个阶乘项目,在这里我必须构建一个模拟阶乘过程的函数,如下例所示:取整数n并计算n! = n x(n-1)x(n-2)x(n-3)⋅⋅⋅⋅x 3 x 2 x1。练习要求使用函数来执行此操作。 我显然被卡住了,并用谷歌搜索解决方案以更好地理解这个问题。那不是完全有效,我陷入了一个我几乎无法理解的新概念,即递归。 这是我用谷歌搜索的解决方案:

def factorial_recursive(n):
    if n == 1:
        return 1

    # Recursive case: n! = n * (n-1)!
    else:
        return n * factorial_recursive(n-1)

我想了解的是第二个分支中发生的情况 另外,给出此示例测试:

>>> factorial_recursive(5)
120

为什么返回值累加为一? 未在功能主体中指定。 我所知道的是,一个函数会根据某些条件来调用自身,但是它是如何工作的。如果是这样,那不会永远循环吗? n值是否更改,是因为即使在查看代码时它不是很明显,但看起来似乎不是,但resuts却显示了。为何将多个返回值堆叠为一个? 我希望我的问题能得到解答,如果有任何链接的文档或重复的文档,请多多关照。

2 个答案:

答案 0 :(得分:1)

这个想法是,每次调用该函数时,n都会减1。当n == 1时,不调用该函数;它只是返回然后退出。

答案 1 :(得分:1)

如果您认为这样,我相信您可以轻松找到解决方案:

  1. 当n == 1时,函数停止调用自身
  2. 该函数通过在每个周期减少n来调用自身
  3. 返回的结果乘以n

因此,函数将调用自身直到n == 1并将其结果乘以n,然后再返回。

够清楚吗?