试图通过python中的递归解决欧拉工程中的最大质因数问题(问题3)。

问题描述 投票:0回答:1

我一直在尝试用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)

这是 问题 如网站所引。

如果代码的可读性质量有点低,我很抱歉,但我尝试调试了很久都没有结果。

python recursion primes
1个回答
0
投票

当你在输入中定义AllFactors为 y,你从1开始迭代,所以同样的数量的 y 总是包含在AllFactors中。因此,当你在输入上调用getPrimeFactors时,同一输入的 y 被传递,所以这就变成了一个无限循环。

从2而不是1开始迭代可以阻止递归错误。

另外,给大家一个小提示,通常在python中,变量名以小写开头,类以大写开头。这里有更多关于命名惯例的内容。https:/visualgit.readthedocs.ioenlatestpagesnaming_convention.html。.

© www.soinside.com 2019 - 2024. All rights reserved.