0

不,这不是家庭作业,但它在我们的测试学习指南中。我需要了解 return 语句所扮演的角色以及递归所扮演的角色。我不明白为什么函数在 x = 1 后不会中断。

def thisFunc(x):
    print(x)
    if x>1:
         result=thisFunc(x-1)
         print(result)
    return x+1

抱歉,我知道这是多么初级,但我真的可以使用一些帮助。可能是为什么我在任何地方都找不到解释……因为它太简单了。

编辑:为什么它会打印出它的作用以及最后的 x 值是什么以及为什么?对不起,如果我问了很多,我只是很沮丧

4

2 回答 2

1

当您输入带有值的函数时,n>1它会打印当前值,然后使用n-1. 当内部函数返回时,它返回的值n - 1 + 1就是n. 因此,该函数n两次打印出该值,一次在内部递归之前,一次在之后。

如果n == 1,这是基本情况,该函数只打印1一次并且不会再次调用它自己(因此不会result返回打印)。相反,它只是返回,因此为什么1只打印一次。

把它想象成洋葱。

调用thisFunc(n)将导致

n
# what ever the output (via print) of thisFunc(n-1) is
n 
于 2013-01-30T04:19:23.960 回答
0

我不明白为什么函数在 x = 1 后不会中断。

但它确实:

>>> ================================ RESTART ================================
>>> x = 1
>>> def thisFunc(x):
    print("Function called on x-value: ", x)
    if x > 1:
        result = thisFunc(x-1)
        print(result)
    return x+1

>>> thisFunc(x)
Function called on x-value:  1
2
>>>

编辑:为什么它会打印出它的作用以及最后的 x 值是什么以及为什么? 好吧,它会打印出来,因为你告诉它。尝试在执行函数时遵循 x 的值(“x 是一,一不大于1;返回 1+1。好的。[新案例] x 是二,二大于 1...”和很快)。

return并且recursion是编程的一部分;return 语句指定函数的结尾(即使您可能还有几行代码),它们还将数据传回给他们要求的任何东西。在您的情况下,您要问“根据这些规则,当 x 为 1 时会发生什么?”;返回的数据就是你的答案。

如果(您)需要,递归只是让函数调用自身的问题。您只需告诉程序“嘿,只要 x 大于 1,就调用这个函数 [恰好是最初调用的同一个函数] 并让它做它的事情”。为了更好地理解您的函数,我建议您将该行添加"Function called on x-value: "到函数内的第一个print语句中,或者至少可以让您识别哪个打印行是x哪个是result.

对于递归更深入的解释,我推荐使用洪水填充算法和僵尸和猫来解释递归

于 2013-01-30T04:53:53.813 回答