Comme vous le savez, . On pourrait aussi dire . Dans ce cas, on peut aussi aller un peu plus loin, et puisque vaut , remplacer les de par leur valeur, et obtenir :
Rien n'empêche de continuer et d'écrire :
Votre programme doit impérativement utiliser une fonction récursive, et non une boucle.
L'entier .
La chaîne indiquant la valeur de , en ayant remplacé fois les zéros à droite de l'égalité par leur valeur .
entrée :
0
sortie :
0 = 0
entrée :
2
sortie :
0 = ((0 + 0) + (0 + 0))
entrée :
3
sortie :
0 = (((0 + 0) + (0 + 0)) + ((0 + 0) + (0 + 0)))
def toto(n: int) -> str: """Renvoie "0", où "0" est remplacé par "(0 + 0)", récursivement, n fois. >>> toto(0) '0' >>> toto(1) '(0 + 0)' >>> toto(2) '((0 + 0) + (0 + 0))' """ if n == 0: return "0" else: toto_prec = toto(n-1) return "(" + toto_prec + " + " + toto_prec + ")" n = int(input()) print("0 =", toto(n))
Le cœur de la fonction récursive est de construire un objet str
, avec :
+
, puisLe cas de base étant de ne renvoyer que 0
... avec le type str
!
On voit ici l'intérêt de conserver en mémoire toto(n-1)
pour éviter un double appel à chaque profondeur, pour un même résultat.
Pour faire la concaténation, on pourrait aussi écrire return "".join(["(", toto_prec, " + ", toto_prec, ")"])
pour un style plus fonctionnel. Cela se lit : renvoie le collage (join
) sans séparation (""
) des éléments donnés dans la liste ([...]
).