-1
votes

Problème de retour dans la fonction de récursivité

word = ["cs", "is", "fun", "homework", "is", "sometimes", "fun",
"exams", "are", "not", "fun"].
 lst = ["fun", "is","not"]

def num(word,lst,sofar):
    if len(lst) == 0:
        return sofar
    elif lst[0] in word == False:
        return num(word, lst[1:],sofar)
    else:
        sofar = sofar +1
        return num(word,lst,sofar)
function returns how many times the words in list lst occur in list word and returns it as sofarThe function should return 6 but it returns 0

4 commentaires

Je soupçonne fortement que votre problème est un typo: so_far vs Sofar . Vous attribuez à so_far , mais n'utilisez jamais la valeur.


Désolé, c'était une faute de frappe tout en modifiant les noms de la variable. Le problème persiste toujours.


La réponse à cette question devrait être 6 mais elle retourne 0


Votre code tel que modifié ne renvoie toujours rien. Le programme initialise deux listes, définit une fonction et ses sorties sans appeler la fonction.


4 Réponses :


0
votes

Vous avez mot code> et lst code> tourné dans votre logique. Votre code rétrécit la liste qui contient les éléments que vous recherchez - pas la liste où vous les regardez dans.

Correction: p>

def num(word,lst,sofar):
    if not word:
        return sofar

    if word[0] in lst:
        return num(word[1:], lst, sofar+1)
    else:
        return num(word[1:], lst, sofar)


0 commentaires

0
votes

Premier: vous avez déclaré mot code> et lst code> faux, il devrait être l'inverse. Deuxièmement: vous pouvez le faire sans le si-d'autre Troisièmement: Débarrassez-vous du SOFAR

LST = [
    "cs", "is", "fun",
    "homework", "is", "sometimes", "fun",
    "exams", "are", "not", "fun"
]
WORD = ["fun", "is","not"]

def num(word, lst):
    if len(lst) == 0:
        return 0
    inc = 1 if lst[0] in word else 0
    return num(word, lst[1:]) + inc

print(num(WORD, LST))


0 commentaires

0
votes

Le problème est que vous n'allez pas sur le mot suivant dans la liste lorsque le mot a été trouvé.

Vous étiez également itération sur la mauvaise liste (échange lst et Word < / code> autour).

Essayez ceci: xxx

une version légèrement nettoyeuse: xxx


0 commentaires

0
votes

En ce qui concerne la récursion, mon inclinaison est de le garder simple: xxx


0 commentaires