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