我一直在尝试用python解决ProjectEuler中的问题3。我试着使用递归来获得我的因子。但是由于某些原因,我一直遇到递归极限达到的错误。有谁能帮我解决为什么会发生这样的问题?
def getPrimeFactors(y):
AllFactors = [[x, int(y/x)] for x in range(1, (int(math.sqrt(y)+1))) if y%x==0]
Flattened_AF = [j for i in AllFactors for j in i]
print(AllFactors)
print(Flattened_AF)
if len(Flattened_AF)==2:
print(Flattened_AF)
return Flattened_AF
else:
PrimeFactors = [x for x in Flattened_AF if len(getPrimeFactors(x))==2]
print (f'loop in else - {PrimeFactors}')
print(max(PrimeFactors)
getPrimeFactors(4)
这是 问题 如网站所引。
如果代码的可读性质量有点低,我很抱歉,但我尝试调试了很久都没有结果。
当你在输入中定义AllFactors为 y,你从1开始迭代,所以同样的数量的 y 总是包含在AllFactors中。因此,当你在输入上调用getPrimeFactors时,同一输入的 y 被传递,所以这就变成了一个无限循环。
从2而不是1开始迭代可以阻止递归错误。
另外,给大家一个小提示,通常在python中,变量名以小写开头,类以大写开头。这里有更多关于命名惯例的内容。https:/visualgit.readthedocs.ioenlatestpagesnaming_convention.html。.