【发布时间】:2019-11-04 18:11:09
【问题描述】:
我正在努力更好地理解递归。
例如,这里有两个计算n的定义! :
def factorial(num, p=1):
if num == 0:
return p
else:
p *= num
return factorial(num-1,p)
和
def factorial(num):
if num == 1:
return num
return num * factorial(num - 1)
一个比另一个更好吗?我知道第二个构建一个调用堆栈,而第一个是在每一步计算 p 并将其传递给函数的另一个迭代。这些类型的函数是否有单独的名称?第一个不是递归吗?
只是在此处寻找一些了解差异的指导。谢谢!
【问题讨论】:
-
前者是尾调用递归,可以优化,但在CPython中没有优化。
-
@juanpa.arrivillaga 谢谢!知道“尾调用递归”这个名字肯定有帮助……我可以用它做更多的研究。
-
@CristiFati 这太完美了!希望我能在发布问题之前找到它。谢谢!
-
@DavidR。请理解,CPython 不做尾调用优化
标签: python python-3.x recursion