析因计算中递归内函数的困惑
>>> 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
真奇怪。我错过什么了吗?你知道吗
从
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:
。如果您一直使用空格,那么您的加法就起作用了:else
很好,但不需要。你知道吗当
if
测试为true时,下一条指令是return
语句,它退出函数。这意味着在那之后的任何代码无论如何都不会到达。换言之,只有当if
测试为假时,才到达第二return
行,无论是否有else:
块。你知道吗相关问题 更多 >
编程相关推荐