尝试通过 python 中的递归解决欧拉计划(问题 3)中的最大素因数问题

Trying to solve the Biggest Prime Factor problem from Project Euler (Problem 3) through recursion in python

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

这是网站引用的problem。

如果代码可读性质量有点低,我很抱歉,但我一直在努力调试很长时间,但没有成功。

当您为输入 y 定义 AllFactors 时,您从 1 开始迭代,因此相同的数字 y 始终包含在 AllFactors 中。因此,当您在输入上调用 getPrimeFactors 时,将传递相同的输入 y,因此这变成了一个无限循环。

从 2 而不是 1 迭代停止递归错误。

此外,只是一个提示,通常在 python 变量名称以小写字母开头,而 类 以大写字母开头。这里有更多关于命名约定的信息:https://visualgit.readthedocs.io/en/latest/pages/naming_convention.html