Que vaut
trajectoire(0) ?
Il y aura ensuite une erreur car max() n'est pas une liste et ne peut donc pas être ajouté à
liste_alt_max. Pour ajouter un nouvel élément à une liste il faut plutôt écrire :
ou, sans doute plus clair :
c'est dû a un trop grand nombre d'opération pourtant je n'arrive pas à la simplifier plus que ça
Il y avait bien une erreur et le code fonctionne pour des valeurs raisonnables de N. Mais il y a quand même un problème, qui pénalisera probablement votre devoir si vous ne le corrigez pas. Lorsque vous calculez
trajectoire, combien de fois calculez-vous le premier terme de la suite ? Si cela ne vous saute pas aux yeux, essayez la modification suivante de votre implémentation de la suite de Syracuse compressée (j'ai juste ajouté un
print) :
Code : Tout sélectionner
def sc(u0,n):
if n<0: #cas ou n est négatif
return 'Erreur'
if n==0: #rang u0
return u0
else:
for i in range(1,n+1):
print("Calcul du terme : " + str(i))
if u0%2==0:
u0=(u0//2) #si un est pair
else:
u0=(3*u0+1)//2 #si un est impair
return u0
Comment corriger simplement ce problème ?
Rem : je ne sais pas comment est formulé votre DM et il est possible qu'il vous soit demandé en premier une fonction
sc puis une fonction
trajectoire, ce qui peut laisser entendre que la fonction trajectoire
doit utiliser la fonction sc. Il serait plus simple d'écrire en premier la fonction
trajectoire de laquelle on déduit immédiatement la fonction
sc.