Aller au contenu

Programmer une suite récurrente avec Python


BABANAEL

Messages recommandés

Posté(e)

Bonjour,

Le problème de maths (ci-joint) demande d'écrire un programme Python pour calculer une suite récurrente à un rang n.

J'ai trouvé l'expression mathématique de la suite, mais pour le programme, je galère...

J'ai bien trouvé une solution (pièce jointe) mais ça plante quand n est supérieur à 10.

Etrange... Help, please!

Exo 78 page 38 .jpeg

Solution (qui plante).jpeg

  • E-Bahut
Posté(e)
Il y a 7 heures, Barbidoux a dit :

je ne suis pas un spécialiste de Python loin de là mais il me semble qu'il y a plus simple pour calculer f(n)
J'aurais écrit
1.jpg.7ff2c6be485eb5e2a7907ee2c18686fe.jpg


puis

2.jpg.62e26fbb41e11f92d794ddb87b3452da.jpg

 

Dans le programme "principal, la fonction f est utilisée dans le while et prend la valeur f(k), il est inutile de mettre f(k) dans la boucle, l'instruction f(k) isolée sera en erreur à la compilation. Pour faire plaisir aux Pythonneurs il faut ajouter utiliser int(...) pour un entier, float(...) étant pour un flottant.

Le code Python est plus lisible et plus concis que le code AlgoBox, programme en perte de vitesse dans les nouveaux livres de la "réforme" Blanquer.

  • E-Bahut
Posté(e)

@BABANAELJuste un commentaire en ce qui concerne ton problème initial.

Ton programme ne plante pas à partir de n=11, mais le temps de calcul devient tellement long qu'on a l'impression d'un dysfonctionnement.

En fait, cela provient de la mauvaise écriture du programme récursif. Je ne sais pas exactement ce qui se passe, mais l'appel à chaque fois de la boucle "for i in range(n)" doit  se traduire par un effet d'avalanche dans les calculs. Un spécialiste devrait pouvoir en dire plus.

L'utilisation de la récursivité était possible, à condition d'écrire

def f(n) :
   if n == 0:
       return 0
  else:
      return n**2+f(n-1)

J'ai essayé

for i in range(1,31):
  print(i,f(i))

qui s'exécute sans problème.

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...
spam filtering
spam filtering