Calcul des termes d'une suite définie par récurrence

Clemarze Messages postés 2 Statut Membre -  
mamiemando Messages postés 34188 Statut Modérateur -

Bonjour,

J'ai un QCM de python à faire, mais j'ai beaucoup de mal. Serait-il possible qu'une personne m'aide à le résoudre ? 

J'ai par exemple cette question : 

Calculer le terme d'indice {962} de la suite (u_n) définie par :
u_{n+1}={12.0\cdot \sin \left( u_{n}+2.0\cdot n \right)}, \ u_0={2.0}

Vous donnez votre réponse comme un décimal avec au moins cinq chiffres significatifs.

Je ne vois pas qu'elle programme je peux faire ?

En vous remerciant.

A voir également:

5 réponses

yg_be Messages postés 24281 Statut Contributeur Ambassadeur 1 584
 
0
Clemarze
 

Bonjour, 

Mais Ducoup pour la question que j’ai posé sur les suites je ne vois pas dutout comment faire j’ai essayé de la faire mais je ne vois pas comment faire des suites en Python ?

0
yg_be Messages postés 24281 Statut Contributeur 1 584
 

Tu connais bien Python?

0
Phil_1857 Messages postés 1956 Statut Membre 168
 

Bonjour,

C'est pas Ducoup, c'est du coup :-)

Mais avant de la programmer en Python, est-ce que tu sais le faire sur le papier ?

0
mamiemando Messages postés 34188 Statut Modérateur 7 890
 

Bonjour,

Peut-être devrais-tu commencer par chercher comment écrire une fonction récursive en python ? Et normalement la suite devrait être assez naturelle.

Pour rappel, la fonction sinus en python correspond à math.sin

from math import sin

print(sin(0))

Bonne chance

0
yg_be Messages postés 24281 Statut Contributeur 1 584
 

L'utilisation d'une fonction récursive me semble une distraction gaspilleuse dans ce contexte.

0
mamiemando Messages postés 34188 Statut Modérateur 7 890 > yg_be Messages postés 24281 Statut Contributeur
 

Ah bon ? Pourtant u(n+1) dépend de u(n) donc à moins d'avoir une forme close de u(n) je ne vois pas trop comment tu t'en sors sans fonction récursive.

0
yg_be Messages postés 24281 Statut Contributeur 1 584 > mamiemando Messages postés 34188 Statut Modérateur
 

u(n+1)=u(n)*(n+1)
u1=1

Je peux faire avec une fonction récursive, je préfère faire avec une boucle.  Moins gourmand, et plus accessible pour un débutant.

def factrec(n):
    if n<2:
        return 1
    else:
        return n*factrec(n-1)
def factloop(n):
    f=1
    for i in range(2,n+1):
        f=f*i
    return f
print(factrec(5))
print (factloop(5))
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > mamiemando Messages postés 34188 Statut Modérateur
 

Ce qui compte, pour moi, ce n'est pas la facilité d'écriture, c'est la compréhension des concepts.  De mon point de vue, le pire, c'est d'écrire sans comprendre.

Je pense qu'un débutant doit bien maitriser les concepts itératifs avant de passer aux concepts récursifs.

1
mamiemando Messages postés 34188 Statut Modérateur 7 890 > yg_be Messages postés 24281 Statut Contributeur
 

Dans l'absolu je suis d'accord, mais fait amusant, le premier langage que ma promotion a vu en école d'ingénieur était... OCamL... donc tout en récursif, y compris parcourir une liste :-) L'avantage c'est qu'on était au point sur les critères d'arrêts après ça :D

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PierrotLeFou
 

Je suis d'accord avec yg_be.
Bien sûr, la solution récursive est plus élégante, mais la solution itérative est aussi simple dans le cas présent.
Le terme courant ne dépend que du terme précédent qui peut être accumulé dans une simple variable.
Même un problème comme la suite de Fibonacci se fait facilement en itératif.

0