Inscription / Connexion Nouveau Sujet
Niveau Science du Numérique
Partager :

Récursivité

Posté par
foq
24-12-21 à 18:07

Bonsoir

Je suis en terminal avec spécialité   N.S.I . Voici l'exercice que j'arrive pas .

Je voudrais votre aide si vous pait .

Un palindrome un est mot qui se lit dans les deux sens comme "selles" ou "radar"

Compléter la fonction récursive suivante qui renvoie vrai si le mot passé en paramètre est un palindrome

Aide : du slicing

mot="selles"
mot[1:len(mot)-1]
# affiche elle



def palindrome(mot):
    if len(mot)<=1:
        return ...
    else: 
        return mot[...]==mot[...] and palindrome(mot[...])
    
palindrome("selles")


Moi j'ai fait ça :

def palindrome(mot):
    if len(mot)<=1:
        return mot[0]
    else: 
        return mot[0]==mot[-1] and palindrome(mot[-1:])
    
palindrome("selles")

Mais quand je le lance il m'affiche "s" et non True .

Posté par
foq
re : Récursivité 24-12-21 à 18:12

J'ai fait aussi ça :

def palindrome(mot):
    if len(mot)<=1:
        return mot 
    else: 
        return mot[0]==mot[-1] and palindrome(mot[:-1])
    
palindrome("selles")


Mais il m'affiche False .

Posté par
Ulmiere
re : Récursivité 24-12-21 à 18:54

* Dans tes deux codes, tu fais la même erreur dans le if len(mot) <= 1 de retourner mot ou mot[0], alors que tu veux retourner True dans ce cas

* Dans ce code:


def palindrome(mot):
    if len(mot)<=1:
        return mot[0]
    else: 
        return mot[0]==mot[-1] and palindrome(mot[-1:])
    
palindrome("selles")


dans le else, tu appelles palindrome avec mot[-1:], mot[-1], c'est toute la liste à partir du dernier élément et jusqu'au dernier élement. Autrement dit, c'est une autre écriture pour [mot[-1]] et donc palindrome(mot[-1:]) renoie toujours True...


* Dans celui là, toujours dans le else

def palindrome(mot):
    if len(mot)<=1:
        return mot 
    else: 
        return mot[0]==mot[-1] and palindrome(mot[:-1])
    
palindrome("selles")


même genre d'erreur, mot[:-1] désigne toute la liste mot, jusqu'au dernier exclus. C'est la même chose que [mot[0], mot[1], ...., mot[len(mot)-2]] alors que toi, tu veux plutôt [mot[1], mot[2], ...., mot[len(mot)-2]]...

Essaie déjà de corriger ces erreurs là

Posté par
Ulmiere
re : Récursivité 24-12-21 à 19:16

Sinon pour la suite voilà deux autres versions, non récursives

def palindrome(mot):
    return len(mot) <= 1 or mot == mot[::-1]


et une autre qui n'utilise pas de de mémoire du tout

def palindrome(mot):
    return len(mot) <= 1 or all(mot[i] == mot[~i] for i in range(len(mot)>>1))

Posté par
foq
re : Récursivité 24-12-21 à 20:17

def palindrome(mot):
    if len(mot)<=1:
        return True 
    else: 
        return mot[0]==mot[-1] and palindrome(mot[-1:])
    
palindrome("selles")

Posté par
alb12
re : Récursivité 25-12-21 à 09:41

salut,
Cette aide a-t-elle  un interet ?

Aide : du slicing

mot="selles"
mot[1:len(mot)-1]
# affiche elle

Posté par
foq
re : Récursivité 25-12-21 à 11:17

Oui , le professeur nous l'a mis comme aide .

Posté par
alb12
re : Récursivité 25-12-21 à 11:23

A quel endroit as-tu utilise cette aide ?

Posté par
foq
re : Récursivité 25-12-21 à 11:27

Je les pas utilisé .

Posté par
foq
re : Récursivité 25-12-21 à 11:30

J'ai essayé de le mettre dans le else mais ça ne marche pas

Posté par
alb12
re : Récursivité 25-12-21 à 11:32

cette aide est peut etre utile
Pourrais-tu decrire en une phrase (langage naturel) les instructions qui devraient etre situees apres le dernier return ?  

Posté par
foq
re : Récursivité 25-12-21 à 11:36

Si la lettre des chaque extrémité du mot sont égale  et après j'aipas compris .

Posté par
alb12
re : Récursivité 25-12-21 à 13:26

un mot est un palindrome
si et seulement si
(le premier et le dernier caractere sont identiques) et ( le mot ??? est un palindrome)



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !