I wurde für die Frage Projekt Euler arbeitet an einer Lösung # 4: „Finden Sie die größte Palindrom aus dem Produkt von zwei 3-stellige Zahlen gemacht“maximale Rekursionstiefe in Python-Klasse überschritten, Projekt Euler # 4
Ich könnte einfach ein grundlegendes Skript und eine Schleife schreiben, aber ich neige dazu, Dinge in Klassen zu schreiben.
Ich war eine Weile nicht mehr in Python, also benutze ich diese Übungen, um mit der Sprache vertraut zu bleiben.
Während durch die Faktoren Looping die Antwort herauszufinden, erhalte ich diese Fehlermeldung:
File "p4.py", line 35, in is_palindrome
n = str(p)
RuntimeError: maximum recursion depth exceeded while getting the str of an object
Ich vermute, es die Art und Weise, das ich meine rekursive Methode formatiert, aber ich kann nicht herausfinden, wie sie zu beheben es.
Kann mir jemand erklären, was ich falsch mache, wenn ich meine rekursive Methode strukturiere?
Der Code:
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
und die Funktion auszuführen:
start = time.time()
calculator = PalindromeCalculator();
M = calculator.find_max_palindrome()
elapsed = (time.time() - start)
print "My way: %s found in %s seconds" % (M, elapsed)
Nur ein kleiner Tippfehler, aber sehr schwer zu finden: Sie verwenden nie den 'min_factor' Parameter in Ihrem Konstruktor. –