Écrire une fonction python récursive :
Entrée | un mot (type str). |
---|---|
Sortie | le mot à contre-sens. |
Exemples :
- miroir --> riorim
- burps --> sprub
- zorglub --> bulgroz
- définition récursive
- un premier code
- traceur
- avec accumulateur
- Si le mot n'a aucune lettre ou une seule lettre, il est déjà retourné.
- Dans les autres cas, le miroir du mot est la concaténation de sa dernière lettre et du miroir du mot tronqué de cette dernière lettre.
def miroir(mot) :
if len(mot) < 2 : return mot
else : return mot[-1] + miroir(mot[:-1])
print( miroir('zorglub') )
print( miroir('nom') )
Décomposons un peu avec des traces :
def trace(f):
decale = 0
def g(mot):
nonlocal decale
if mot == '' : pass
else :
print('| ' * decale + '|--', f.__name__, '(', mot ,') ', end = ' = ' )
print( mot[-1], '+', f.__name__, '(', mot[:-1] ,') ' )
decale += 1
valeur = f(mot)
if mot == '' : print('| ' * decale , f.__name__, '(', mot,') =', repr(valeur) )
else :
print('| ' * decale , mot[-1] , '+', f.__name__, '(', mot[:-1],') =', repr(valeur), end = ' --> ' )
print( f.__name__, '(', mot,') =', repr(valeur) )
decale -= 1
return valeur
return g
def miroir(mot) :
if mot == '' : return mot
else : return mot[-1] + miroir(mot[:-1])
miroir = trace(miroir)
miroir('zorglub')
def miroir(mot, tom = '' , m = -1 ) :
if m == -1-len(mot) : return tom
else : return miroir(mot, tom + mot[m] , m-1)
print( miroir('zorglub') )