Ich versuche gerade, mich mit dem Lernen von Python zu beschäftigen, und ich bin bei rekursiven Funktionen zu etwas abgestanden. In Think Python, ist eine der Aufgaben eine Funktion zu schreiben, die a, wenn Zahl eine Potenz von Nummer b unter Verwendung der folgende Definition bestimmt:Warum gibt meine rekursive Funktion None zurück?
„eine Zahl, ein, eine Potenz von b, wenn es ist durch b teilbar und a/b ist eine Potenz von b. Schreiben Sie eine Funktion namens is_power, die die Parameter a und b annimmt und True zurückgibt, wenn a eine Potenz von b ist. "
Der aktuelle Stand meiner Funktion:
def isPower(a,b):
return a % b == 0 and (a/b) % b == 0
print isPower(num1,num2)
Wie es ist, das das Ergebnis produziert ich erwarte. Das Kapitel konzentriert sich jedoch auf das Schreiben von rekursiven Funktionen, um die Redundanz zu reduzieren, und ich bin mir nicht ganz sicher, wie ich das letzte "(a/b)% b == 0" in eine Rekursion umwandeln kann. Ich habe versucht:
def isPower(a,b):
if a % b != 0:
return False
elif isPower((a/b),b):
return True
Aber das gibt nur keine zurück.
Was ist der richtige Weg, um diese Funktion zu rekrutieren?
Sie, dass die Bedeutung des ‚/‘ Operator in Python hat sich geändert: Hütet 3+, von der Rückgabe einer Ganzzahl bis zur Rückgabe eines Floats, damit Ihr Code nicht mehr funktioniert. Ändern Sie stattdessen zu '//', was immer einen int zurückgibt. –
Beachten Sie, dass Ihr erster Versuch nicht prüft, ob a eine Potenz von b ist, es prüft, ob a ein Vielfaches von b^2 ist. versuch isPower (12,2), es würde True zurückgeben. – Javier
Nur so heißt es, deine erste Version von isPower ist kaputt - es wird nur angezeigt, ob 'a' ein Vielfaches von' b^2' ist. Es wird zum Beispiel für 'isPower (2, 1)' true zurückgegeben, was niemals wahr sein sollte. Zu diesem Zweck sollten Sie sicherstellen, dass jede rekursive Version überprüft, ob '(b == 1 && a! = 1)' bevor es fortfährt, oder es entweder in einer Endlosschleife stecken bleibt oder die falsche Sache zurückgibt. – cHao