【发布时间】:2016-11-15 17:11:30
【问题描述】:
我用这个代码找到一个数字的最小除数:
def smallestDisvisor(n):
return factor(n,2)
def factor(n,divisor):
if (square(divisor) - n > 0):
return n
elif (n % divisor == 0):
return divisor
else:
return factor(n,divisor + 1)
print(smallestDisvisor(32452843))
但是,当我以足够大的值运行它时,我得到:
RecursionError: maximum recursion depth exceeded
[Finished in 0.5s with exit code 1]
我不明白递归错误。这段代码不是实现了一个迭代过程吗?
factor(32452843,2) -> factor(32452843,3) -> factor(32452843,4)...
如果没有,我该如何实现这个算法的迭代过程?
【问题讨论】:
-
你必须使用
while循环而不是递归 -
Python 没有尾调用优化 (see this question),因此递归不会像您描述的那样展开。您需要使用循环。
-
你是说我们不能在 Python 中实现迭代过程?
-
实现迭代过程非常简单——但这建议您使用迭代控制结构:for、while 等。
-
好吧...实际上递归过程和递归过程调用是不同的:见stackoverflow.com/questions/17254240/…