Vous êtes sur la page 1sur 3

Récursivité

Recursion

1. Introduction

Exemple: Soit n dans N*, factorielle n

n! = 1.2.3….n

Algorithme:

Entrée: entier n

Sortie: entier n!

Version itérative:

Def factorielle(n):

nF = 1

for i in range(2,n+1):

nF *= i

return nF

Version récursive:

Principe: Pour calculer n!, on calcule un k! Avec k < n. “Une fonction qui s’appelle elle-
même” ou plus précisément, elle résout un problème de taille n grâce à la résolution
de problèmes de k < n

Def factorielleRec(n):

if n == 1 or n == 0:

return 1

else:

return factorielleRec(n-1)*n

2. Pile d’exécution

Empile tous les appels de fonction et toutes les variables utilisées

Exemple: pile de factorielle-rec(4):

n=1, factorielle-rec(1) = 1

n=2, 2 * factorielle-rec(1)

n=3, 3 * factorielle-rec(2)

n=4, 4 * factorielle-rec(3)

3. Exemples

Algorithme d’Euclide:

PGCD(a,b) où a, b deux entiers

Version itérative:

1
def pgcd(a, b):

while b:

a, b = b, a % b

return a

Version Récursive:

print(pgcd(8,4))

def PGCDrec(a,b):

if a%b:

return b

return pgcd(b,a%b)

Exponentiation: on veut calculer xn où n >= 0

Version itérative:

Def exp(a,n):

x = a

for I in range(n):

x *= a

return x

Version récursive:

Def exp(a,n):

if n:

return 1

return a*exp(a,n-1)

Version récursive rapide:

def expo_rapide(x, n):

if n == 0:

return 1

y = expo_rapide(x, n // 2)

if n % 2 == 0:

return y * y

else:

return y * y * x

Avantage et Inconvénients

Inconvénients :

1. Chevauchement des appels récursifs

Il recalcule plusieurs fois les mêmes valeurs

2. Taille de la pile d’exécution

Si trop d’étapes, il ne peut pas tout empiler (stack over ow)

Avantage:

1. Certains problèmes sont facilement résoluble récursivement mais pas itérativement.

Tours d’Hanoï :

2
fl
3

Vous aimerez peut-être aussi