Le comptage des voyelles dans une chaîne de caractères en utilisant la récursivité
Je comprends que la récursivité est une fonction qui s'appelle elle-même, cependant, je ne peux pas comprendre comment exactement pour obtenir ma fonction à appeler elle-même pour obtenir les résultats souhaités. J'ai besoin de simplement compter le nombre de voyelles dans la chaîne de caractères donnée à la fonction.
def recVowelCount(s):
'return the number of vowels in s using a recursive computation'
vowelcount = 0
vowels = "aEiou".lower()
if s[0] in vowels:
vowelcount += 1
else:
???
Je suis venu avec cette à la fin, grâce à la perspicacité d'ici.
def recVowelCount(s):
'return the number of vowels in s using a recursive computation'
vowels = "aeiouAEIOU"
if s == "":
return 0
elif s[0] in vowels:
return 1 + recVowelCount(s[1:])
else:
return 0 + recVowelCount(s[1:])
- Ne pas utiliser un
else
bloc. Vous devez répéter, peu importe. - Ok je vais voir ce que je peux venir avec.
- Les devoirs de la balise a été désapprouvée; merci de ne pas l'utiliser. Si vous pensez qu'il est important de mentionner le travail dans votre question elle-même. 🙂
Vous devez vous connecter pour publier un commentaire.
Essayer ça, c'est une solution simple:
Il prend en compte le cas lorsque les voyelles sont en majuscules ou en minuscules. Il pourrait ne pas être le moyen le plus efficace pour parcourir récursivement une chaîne de caractères (parce que chaque appel récursif crée un nouveau tranches de chaîne), mais c'est facile à comprendre:
La deuxième étape sera de réduire à terme la chaîne de longueur zéro, donc la fin de la récursivité. Sinon, la même procédure peut être mise en œuvre à l'aide de la queue de la récursivité - non pas que cela fait une différence en termes de performances, étant donné que Disponible ne pas mettre en œuvre la queue de la récursivité de l'élimination.
Juste pour le fun, si nous supprimer la restriction que la solution doit être récursive, c'est de cette façon que j'avais de le résoudre:
De toute façon cela fonctionne:
if
bien que dans mon code 😉recVowelCount
ne pas "travailler" (essayezrecVowelCount('a'*1000)
)Votre fonction probablement besoin de chercher généralement comme ceci:
Utilisation tranche de supprimer le 1er caractère et de tester les autres. Vous n'avez pas besoin d'un autre bloc parce que vous devez appeler la fonction pour chaque cas. Si vous le mettez dans le bloc else, alors il ne sera pas appelé, lors de votre dernière lettre est une voyelle: -
Cela appel de votre fonction récursive avec la nouvelle chaîne avec le 1er caractère tranché.
else
bloc...c'est l'approche simple:
ici est le même avec moins de code:
en voici une autre:
Malheureusement, cette sera échouer pour de longues chaînes.
si c'est quelque chose qui l'intéresse, regardez cet article de blog.
Voici une approche par programmation fonctionnelle pour vous permettre de l'étudier:
L'idée est de diviser le problème en deux étapes, où la première ("carte") convertit les données en une autre forme (une lettre -> 0/1) et la seconde ("réduire") recueille converti éléments en une seule valeur (la somme de 1).
Références:
Un autre, plus avancé solution est de convertir le problème en queue récursive et l'utilisation d'un trampoline pour éliminer l'appel récursif:
Noter que, contrairement naïfs solutions de cela, on peut travailler avec de très longues chaînes sans causer de "profondeur de récursion dépassé les erreurs".