Une fonction récursive fait appel à elle-même.

Exemple : calcul de n!

Pour un entier naturel n non nul, n! est la factorielle de n. C'est le produit des entiers de 1 à n.

Exemples :

3! = 3$\times$2$\times$1 = 6

5! = 5$\times$4$\times$3$\times$2$\times$1 = 120

1! = 1

In [1]:
def factorielle(n):
        assert n>=1, "Entrer un entier !" #si on entre un nombre <1 , un message d'erreur est envoyé
        if n == 1:
            return 1
        else:
            return n*factorielle(n-1)
    
factorielle(5), factorielle(3),factorielle(1)    
Out[1]:
(120, 6, 1)
In [ ]:
 

Exercice 1

On dépose chaque mois dans une tirelire 10 euros de plus que le mois précédent. Le premier mois, le versement s'élève à 30 euros. Au bout de combien de mois la tirelire contiendra-t-elle plus de 10 000 euros ?

Ecrire une fonction récursive versement(n) qui prend en paramètre le numéro du mois et retourne le versement effectué ce mois-là.

In [8]:
def versement(n):
    if n == 1:
        return 30
    return versement(n-1) +10

versement(2), versement(3), versement(10)
    
Out[8]:
(40, 50, 120)

Résoudre le problème posé.

In [10]:
tirelire = 30
mois = 1
while tirelire <= 10000:
    tirelire = tirelire + versement(mois)
    mois = mois +1
print(mois-1)
    
    
43

vérification : on doit résoudre $30 + 40 + 50 + \dots + (30+10n) \geqslant 10000$, soit

$(n+1) \times \dfrac{30 + 30+10n}{2} \geqslant 10000$

C'est une équation du second degré qui s'écrit :

$5n^2 + 35 n -9970 \geqslant 0$

La solution est $n \geqslant 42$. Comme le premier mois est le mois obtenu pour $n=0$, on dépasse 10000 au 43ème mois.

Exercice 2

Ecrire une fonction récursive puissance_recursive($a, n$) qui prend en paramètres deux entiers naturels et retourne $a^n$

In [6]:
def puissance_recursive(a,n):
    if n ==0:
        return 1
    return a*puissance_recursive(a,n-1)

puissance_recursive(2,10)
Out[6]:
1024

 Exercice 3

Rechercher des situations où on peut utiliser une fonction récursive.

In [ ]: