Python中递归函数的返回值

时间:2017-12-29 22:40:38

标签: python recursion

我在理解Python中的递归函数方面遇到了一些麻烦(好吧,我猜一般情况下)。我试着寻找答案,但也不确定如何寻找答案。

当我搜索时,以递归函数示例最常见:

def sfactorr(j):
    if j == 1:
        return 1
    else:
        return j * sfactorr(j-1)

每次函数大于1时,它再次启动,直到j == 1.但是当它达到1时,返回值不应该是1吗?显然,当你运行它时,你会得到整个函数的结果,但我似乎并不完全理解为什么会这样。

换句话说,它是如何返回正确的值而不是基本条件返回的值?

由于

1 个答案:

答案 0 :(得分:1)

您必须完成这些步骤。

假设我们将3传递给该函数。

当函数首次运行时,j>因此,它不返回1,而是返回j * [用一个小于j调用的函数)。但它实际上无法返回,直到它调用的函数返回。

它继续这样做直到j为1.这是基本条件。当j为1时,1返回到它上面的函数。

因此。从j == 3开始:

(1) j == 3, returning j * the result of (2)
(2) j ==2, returning j * the result of (3)
(3) j == 1, returning 1

因此按顺序(1),(2),(3)调用函数,但按顺序(3),(2),(1)返回。

(3) returns 1
(2) takes the 1 from (3) and multiplies it by (2), resulting in 2. Then it returns that.
(1) takes the 2 from (2) and multiplies it by 3, resulting in 6. It returns that as a final value. 

递归语句意味着函数全部折叠回自身,而不是只运行最后一个语句。