Zwei Dinge sind falsch:
Sie sind die letzten Zeichen auf jedem rekursiven Aufruf abschneidet:
return count_m_recursive(sentence[1:s-1])
Sie das Gespräch nicht zu s-1
, das Ende Index begrenzen nicht enthalten.
Sie möchten den Rest des Textes nicht ignorieren, wenn Sie am Anfang eine m
finden; Ihre Version gibt 1
zurück und ignoriert den Rest der Zeichenfolge.
Ihre Funktion arbeitet mit:
elif sentence[0] == 'm':
return 1 + count_m_recursive(sentence[1:])
else:
return count_m_recursive(sentence[1:])
oder vereinfacht:
def count_m_recursive(sentence):
if not sentence: # an empty string tests false
return 0
return (1 if sentence[0] == 'm' else 0) + count_m_recursive(sentence[1:])
oder sogar die Tatsache nutzen, dass bool
ist eine Unterklasse von int
und True
1 ist, False
0 :
def count_m_recursive(sentence):
if not sentence: # an empty string tests false
return 0
return (sentence[0] == 'm') + count_m_recursive(sentence[1:])
Demo:
>>> def count_m_recursive(sentence):
... if not sentence: # an empty string tests false
... return 0
... return (sentence[0] == 'm') + count_m_recursive(sentence[1:])
...
>>> count_m_recursive('my oh my')
2
Wie auf der Erde erwarten Sie, dass Code zurück, '2'? Ich meine .... * da ist nicht mal eine Summe da *! Diese Funktion immer und * nur * gibt '0' oder '1' zurück. – Bakuriu