python类中超过了最大递归深度,project Euler#4
我正在为欧拉计划的问题#4制定解决方案: “查找由两个3位数字的乘积构成的最大回文。” 我可以只写一个基本的脚本和循环,但我倾向于在类中编写东西 我已经离开python一段时间了,所以我使用这些练习来熟悉python语言 在循环分析各种因素以找出答案时,我收到了以下错误:python类中超过了最大递归深度,project Euler#4,python,recursion,Python,Recursion,我正在为欧拉计划的问题#4制定解决方案: “查找由两个3位数字的乘积构成的最大回文。” 我可以只写一个基本的脚本和循环,但我倾向于在类中编写东西 我已经离开python一段时间了,所以我使用这些练习来熟悉python语言 在循环分析各种因素以找出答案时,我收到了以下错误: File "p4.py", line 35, in is_palindrome n = str(p) RuntimeError: maximum recursion depth exceeded while getting t
File "p4.py", line 35, in is_palindrome
n = str(p)
RuntimeError: maximum recursion depth exceeded while getting the str of an object
我猜这是我格式化递归方法的方式,但我不知道如何修复它
有人能解释一下,在构造递归方法方面,我做错了什么吗
守则:
import math
class PalindromeCalculator:
def __init__(self, min_factor=100, max_factor=999):
self.stable_factor = max_factor
self.variable_factor = max_factor
def find_max_palindrome(self):
return self.check_next_product()
def check_next_product(self):
product = self.stable_factor * self.variable_factor;
if self.is_palindrome(product):
print("We found a palindrome! %s" % product)
return str(product)
else:
# Reduce one of the factors by 1
if self.variable_factor == 100:
self.variable_factor = 999
self.stable_factor -= 1
else:
self.variable_factor -= 1
self.check_next_product()
def is_palindrome(self, p):
# To check palindrom, pop and shift numbers off each side and check if they're equal
n = str(p)
length = len(n)
if length % 2 == 0:
iterations = length / 2
else:
iterations = (length - 1) / 2
for i in range(0, iterations):
first_char = n[i:i+1]
last_char = n[-(i+1)]
if first_char != last_char:
return False
return True
要运行该函数,请执行以下操作:
start = time.time()
calculator = PalindromeCalculator();
M = calculator.find_max_palindrome()
elapsed = (time.time() - start)
print "My way: %s found in %s seconds" % (M, elapsed)
这类似于Java中的
StackOverflowerError
。因为check\u next\u产品
调用自身太多,嵌套函数调用太多,Python已经放弃跟踪它们。您可以增加递归限制,但事实上,递归非常深入,这表明您最好编写一个迭代解决方案。递归并不真正适用于此问题。请检查:
无论如何,为它编写一个迭代算法非常简单,因此不需要使用递归。只是一个小错误,但很难找到:您从未在构造函数中使用
min\u factor
参数。