RÉCURSIVITÉ
La récursivité est la caractéristique d'un programme ou d'une procédure de s'appeler par lui-même (au moins une fois). Grâce à la récursivité, on peut résoudre de façon simple et concie de nombreux problèmes informatiques. Du fait de cette puissance, faut faire attention, car ce point positif peut revenir contre nous. Le programme ou la procédure peut s'ils ont mal été programmés s'appeler indéfiniment et causer l'arrêt de la machine. Il faut donc bien faire attention à la condition d'arrêt qu'on utilise.Factoriel
Nous allons débuter par les factoriels. Voici la définition de la récurence des factorielsn! = n * (n-1) * (n-2) * ... * 1
l! = 1
La fonction factorielle sans l'utilisation de récursion
function Factorielle(number:integer):integer; var factoriel,i:integer; begin if number = 0 then factoriel := 0 else begin factoriel := 1; for i := number downto 1 do factoriel := factoriel * i end; result := factoriel; end;
La fonction factorielle avec la récursion
function factorielle_recursion( n: integer): integer; begin if n <= 0 then factorielle_recursion := 1 else result := n * factorielle_recursion( n - 1 ); {return n*(n-1)! } end;
On peut remarquer que la fonction des factoriels qui utilise la récursion est plus courte. La pile est grandement utilisée puisque que chaque appel à la fonction créée à nouveau les variables... le tout est ajouté à la pile. La récursivité est un gouffre pour la mémoire.
Fibonacci
Voici la définition de la récurence de FibonacciFib(n) = Fib(n-1) + Fib(n-2) for n > 1
Fib(0) = 0
Fib(1) = 1
La fonction fibonacci sans la récursion
function fibonacci(n:integer):integer; var i, Un, Un_1, Un_2 : integer; begin Un_1 := 1 ; Un_2 := 1 ; for i:=2 to n do begin Un := Un_1 + Un_2 ; Un_2 := Un_1 ; Un_1 := Un ; end; result := Un ; end;La fonction fibonacci avec la récursion
function fib( n: integer): integer; begin if n <= 1 then fib := n else fib := fib(n-1) + fib(n-2); end;
Vous allez vous rendre compte rapidement des différences de performances qu'il y a entre les deux versions de fibonacci, et ce, aussitôt qu'une valeur de 20 et plus sera attribuée à n.
Pour de plus amples renseignements sur la récursivité, rendez-vous à l'excellent tutoriel sur Chambily.
Aucun commentaire:
Enregistrer un commentaire