BABANAEL Posté(e) le 22 novembre 2019 Signaler Posté(e) le 22 novembre 2019 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!
E-Bahut Barbidoux Posté(e) le 22 novembre 2019 E-Bahut Signaler Posté(e) le 22 novembre 2019 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 puis
E-Bahut pzorba75 Posté(e) le 23 novembre 2019 E-Bahut Signaler Posté(e) le 23 novembre 2019 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 puis 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 julesx Posté(e) le 23 novembre 2019 E-Bahut Signaler Posté(e) le 23 novembre 2019 @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.
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.