Pour conclure ce topic sur une note plus optimiste, voici la correction de l'exercice.
La définition retenue ici c'est qu'une suite de Syracuse est initialisée à un nombre U0 entier positif quelconque, puis à chaque itération on coupe en deux le nombre s'il est pair, ou on le triple et on lui ajoute 1 dans le cas contraire.
Une conjecture fameuse (non encore démontrée) dit que l'altitude (hauteur maximale de la suite) et la longueur du "vol" opéré par la suite, sont finies. Autrement dit, il suffit d'un nombre fini d'itérations pour que la suite atterrisse immanquablement sur la valeur 1, puis se stabilise sur son "cycle trivial" 1 4 2 1 4 2 1 ... seul cycle qui lui soit connu à ce jour (sinon la conjecture serait démentie).
def Syracuse(u,n) :
for i in range(1,n+1): # Attention: i varie de 1 à n
if u%2 == 0: u = u/2 # si u est pair on le divise par 2
else: u = 3*u + 1 # sinon : triple + 1
return u
Et pour tester la fonction :
# Test de la fonction :
for i in range(0,10): print i, ": ", Syracuse(1,i)
for i in range(0,10): print i, ": ", Syracuse(5,i)
for i in range(0,16): print i, ": ", Syracuse(17,i)