我的程序适用于较小的数字,例如144,123或60,但是当数字数量级增加时,似乎停止工作。我参加了C ++入门课程,我隐约记得有溢漏。但是,我不确定python变量如何精确工作,因为似乎未明确声明变量类型。 1024似乎对于整数溢出来说很小,但是也许我忽略了递归中的某些内容,因为我才刚刚开始执行挂起递归。有人可以向我解释为什么该算法会分解为更大的数字吗?
num = 1024
#Used to remove duplicates of the same prime
def simplify (num,prime):
if(num % prime == 0):
return simplify(num/prime,prime)
else:
return (num,num)
#used to find the prime factors
def pFact(num,a,b):
if a == 1:
return
elif b == 1:
print (a, "is a prime")
return pFact((simplify (num,a))[0],(simplify (num,a))[1],a)
elif a % b == 0:
return pFact(num,b,b-1)
elif a % b != 0:
return pFact (num,a,b-1)
elif b == 0:
return (num,num,num-1)
pFact(num,num,num-1)
RecursionError:在比较中超过了最大递归深度
进程返回1(0x1)执行时间:0.082 s 按任意键继续 。 。
答案 0 :(得分:0)
由于所有递归调用均在函数末尾进行,因此您可以使用baruchel's Tail Call Optimization for Python(与pip install tco
一起安装):
from tco import with_continuations
num = 10240
#Used to remove duplicates of the same prime
def simplify (num,prime):
if(num % prime == 0):
return simplify(num/prime,prime)
else:
return (num,num)
#used to find the prime factors
@with_continuations()
def pFact(num,a,b, self=None):
if a == 1:
return
elif b == 1:
print (a, "is a prime")
return self((simplify (num,a))[0],(simplify (num,a))[1],a)
elif a % b == 0:
return self(num,b,b-1)
elif a % b != 0:
return self(num,a,b-1)
elif b == 0:
return (num,num,num-1)
pFact(num,num,num-1)
这将输出:
5 is a prime
2 is a prime