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
0
user1727585 8 Okt. 2012 im 08:26

4 Antworten

Beste Antwort

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:])
4
John La Rooy 8 Okt. 2012 im 04:36
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

0
Korrupt 8 Okt. 2012 im 08:02

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:])
1
Joran Beasley 8 Okt. 2012 im 04:32
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:

  1. Basisfall
  2. Sie müssen in Richtung Basisfall voranschreiten
  3. rekursiver Aufruf
2
Asterisk 8 Okt. 2012 im 04:31