析因计算中递归内函数的困惑

2024-05-13 03:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

析因计算中递归内函数的困惑

>>> def factorial(n):
...     def fac_iter(n, accum):
...         if n <= 1:
...             return accum
...         return fac_iter(n - 1, n * accum)
...     return fac_iter(n, 1)
...
>>> factorial(5)
120

我困惑的是为什么在声明return fac_iter(n - 1, n * accum)之前没有else。在我看来,这个递归函数fac_iter将永远迭代。我试图添加一个else作为我的逻辑:

...        if n <= 1:
...            return accum
...        else:
...            return fac_iter(n - 1, n * accum)
>>>    else:
        ^
TabError: inconsistent use of tabs and spaces in indentation

真奇怪。我错过什么了吗?你知道吗


Tags: of函数声明returnifusedef逻辑
2条回答

n=5开始调用def fac_iter(5, 1)

这将调用fac_iter(4, 5 * 1)

这将调用fac_iter(3, 4 * 5 * 1)

这将调用fac_iter(2, 3 * 4 * 5 * 1)

这将调用fac_iter(2, 3 * 4 * 5 * 1)

这将调用fac_iter(1, 2 * 3 * 4 * 5 * 1)

这将返回2 * 3 * 4 * 5 * 1

else是不需要的-n一直减少1,有时它将是1,if是真的。然后累加器返回,直到它用n调用自己,n比之前少1。你知道吗

完成。你知道吗

出现的错误是因为混合了制表符和空格,而不是因为添加了else:。如果您一直使用空格,那么您的加法就起作用了:

>>> def factorial(n):
...     def fac_iter(n, accum):
...         if n <= 1:
...             return accum
...         else:
...             return fac_iter(n - 1, n * accum)
...     return fac_iter(n, 1)
...
>>> factorial(5)
120

else很好,但不需要。你知道吗

if测试为true时,下一条指令是return语句,它退出函数。这意味着在那之后的任何代码无论如何都不会到达。换言之,只有当if测试为假时,才到达第二return行,无论是否有else:块。你知道吗

相关问题 更多 >