T-3.2 Récursivité

Exemples et Exercices

Exemples
Vous savez très bien utiliser une boucle for pour calculer une somme :
  • On initialise la variable somme
  • On itère
  • Dans la boucle on ajoute les éléments
C'est un accumulateur. Exemple :
Exemple : Calculer la sommes des inverse des carrés des entiers de 1 à n

Pour la petite histoire, cette somme tend vers π²/6, cela peut être démontré mais ce n'est pas notre propos.

Il existe une autre façon de calculer cette somme. L'idée est la suivante :

On ajoute (dans somme) 1/n² puis la somme des inverses des carrés des entiers de 1 à n-1.

Mais en fait nous n'allons pas utiliser de variable somme. On va renvoyer le résultat. En fait on peut écrire :

 \sum\limits_{i=1}^n \frac{1}{i^2} = \frac{1}{n^2} + \sum\limits_{i=1}^{n-1} \frac{1}{i^2}

Ce qui, dans le code, ce traduit par :

somme_inverse_carres(n) = 1/n**2 + somme_inverse_carres(n - 1)

Nous allons voir comment programmer cela. L'idée est donc que la fonction sum_inverse_carres s'appelle elle même. On désigne cela par le terme de fonction récursive.

Toutefois, il faut que le processus s'arrête.... Ici on appelle la fonction avec n-1 donc la valeur de l'argument décroit. Jusqu'où ???

En fait, dans tout programmation récursive on doit définir un cas de base, un cas simple où le résultat est trivial, et on peut renvoyer ce résultat sans rappeler la fonction.

Ici le cas de base est n = 1, et la valeur renvoyée dans ce cas est 1.

Exemple : version récursive du code précédent

Exercices

Exercice 1 : somme des entiers de 0 à n

Exercice de code : Somme des entiers de 0 à n
Vous savez programmer cela en itératif avec une boucle for, mais ici vous devez le faire de façon récursive.

COnTRAINTE : vous ne pouvez pas utiliser for ou while dans cet exercice.

Exercice 2 : a^n

Oui... je sais, nous l'avons déjà vu en exemple .... mais saurez vous le refaire ?

Exercice de code : calculer a^n

Il faut toujours penser à vérifier les cas "limites".
Votre fonction renvoie-t-elle le bon résultat pour 0^0?


Indice 
Réponse