Ich muss die Rekursion verwenden, um die Anzahl der Vokale in einer Zeichenfolge zu ermitteln. Wenn also hello
eingegeben wird, möchte ich, dass es 2
zurückgibt.
Das Problem, das ich habe, ist, zum nächsten Zeichen in der Zeichenfolge zu gehen.
def recVowelCount(i):
count = 0
if i in 'aeiou':
count +=1
reVowelCount(i)
else:
reVowelCount(i)
return count
4 Antworten
Hier ist eine Möglichkeit, dies mit Rekursion zu tun :)
def recVowelCount(i, chars_to_find='aeiou'):
if not chars_to_find:
return 0
return i.count(chars_to_find[0]) + recVowelCount(i, chars_to_find[1:])
Das Problem in Ihrem Code ist nun das
if i in 'aeiou':
Würde fragen if 'hello' in 'aeiou':
, was nicht sehr nützlich ist. Sie müssen if i[0] in 'aeiou'
überprüfen, wobei i[0]
bei jedem rekursiven Aufruf der Funktion jeder Buchstabe von "hello"
ist
Beginnen Sie mit dem einfachen Fall. Was passiert, wenn die Eingabezeichenfolge leer ist? Sie würden gerade 0
zurückgeben, oder?
def recVowelCount(i):
if not i:
return 0
Wir sind also halb fertig. Jetzt müssen Sie darüber nachdenken, was passiert, wenn i
nicht leer ist. Wenn das erste Zeichen ein Vokal ist, zählen wir 1
und übergeben den Rest der Zeichenfolge rekursiv an die Funktion
def recVowelCount(i):
if not i:
return 0
if i[0] in 'aeiou':
count = 1
else:
count = 0
return count + recVowelCount(i[1:])
Ok .. das kann ein wenig überarbeitet werden
def recVowelCount(i):
if not i:
return 0
count = 'aeiou'.count(i[0])
return count + recVowelCount(i[1:])
Und schlussendlich
def recVowelCount(i):
if not i:
return 0
return 'aeiou'.count(i[0]) + recVowelCount(i[1:])
def find_vowels(word=None, count=0):
if word:
if word[0] in ('A','E','I','O','U','a','e','i','o','u'):
count += 1
return find_vowels(word=word[1:], count=count)
else:
return count
find_vowels('python is awesome')
Die Funktion find_vowels
akzeptiert zwei Parameter: Einer ist word
, die eigentliche Zeichenfolge, nach der gesucht werden soll. Das andere ist count
, das das gesamte Vorkommen von Vokalen enthält. Der Anfangswert für count
wird auf 0 gesetzt.
Wenn word
leer ist, gibt die Funktion den Zählwert zurück. In diesem Fall wurde word
vollständig auf Vokale überprüft. if word:
Der folgende Block enthält die eigentliche Logik. Das erste Zeichen wird wiederholt in word
überprüft. Wenn es sich um einen Vokal handelt, wird das Argument count
inkrementiert.
In return find_vowels(word=word[1:], count=count)
findet die Rekursion statt. Mit word=word[1:]
schneiden wir das erste Zeichen, seit es überprüft wurde.
Beispiel :
Lass word ='Python'
So sieht der Wert von word
in nachfolgenden Aufrufen aus:
Python
- 1. Anruf
ython
- 2. Anruf
thon
- 3. Aufruf
hon
- 4. Anruf
on
- 5. Anruf
n
- 6. Anruf
- letzter Anruf (leer)
Wenn die Zeichenfolge leer ist, wird schließlich count
zurückgegeben.
Dies wird als Schwanzrekursion bezeichnet: http://en.wikipedia.org/wiki/Tail_call
Zunächst ist nicht klar, welches Argument Sie vorbringen def countVowels(my_string):
ist wahrscheinlich ein besserer Anfang
Als nächstes benötigen Sie einen Basisfall
if len(my_string) == 1:
if my_string in "aeiou": return 1
else:return 0
Dann brauchst du deine Rekursion
elif my_string[0] in "aeiou":
return 1 + countVowels(my_string[1:])
else:
return 0 + countVowels(my_string[1:])
def recVowelCount(s):
''' Return number of vowels in string s'''
if len(s) == 0:
return 0
letter = s[0]
if letter in 'aeiou':
return 1 + recVowelCount(s[1:])
return recVowelCount(s[1:])
print recVowelCount('hello')
Jedes rekursive Programm besteht aus 3 grundlegenden Schritten:
- Basisfall
- Sie müssen in Richtung Basisfall voranschreiten
- rekursiver Aufruf
Verwandte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.