Está en la página 1de 2

INTRODUCCIÓN A LA RECURSIÓN EJEMPLO RECURSIÓN LINEAL NO FINAL

Se dice que una función está definida recursivamente si su FUNCTION Factorial (n : integer) : integer;
definición consta de dos partes: BEGIN
1. Un caso base, en el cual se especifica el valor de la IF n = 0 THEN {Caso base }
función para uno o más valores del dominio de la Factorial := 1
función ELSE {caso recursivo }
2. Un paso inductivo o recursivo, en el cual el valor Factorial := n * Factorial(n-1)
de la función se define en términos de los valores END;
de la función definidos previamente
n Factorial := n * Factorial(n-1)
Ejemplo: La función factorial 5 := 5 * Factorial(4) Caso recursivo
Caso base : 0! = 1
n Factorial := n * Factorial(n-1)
Caso recursivo : n! = n * (n-1)! Para n>0
4 := 4 * Factorial(3) Caso recursivo
5! = 5 * 4!
n Factorial := n * Factorial(n-1)

4! = 4 * 3! 3 := 3 * Factorial(2) Caso recursivo
↓ n Factorial := n * Factorial(n-1)
3! = 3 * 2! 2 := 2 * Factorial(1) Caso recursivo

n Factorial := n * Factorial(n-1)
2! = 2 * 1!
1 := 1 * Factorial(0) Caso recursivo

1! = 1 * 0! = 1 * 1 n Factorial := 1
↓ ↑ 0 1 Caso base
0! = 1 Versión iterativa:
La recursión es la facilidad proporcionada por algunos FUNCTION Factorial (n : integer) : integer;
lenguajes de programación para que un subprograma se VAR Fact : integer; i : integer;
BEGIN
llame a si mismo.
Fact := 1;
El sistema gestiona automáticamente el almacenamiento FOR i := 2 TO n DO
de los entornos de ejecución de cada una de las llamadas Fact := i * Fact;
al subprograma. Factorial := Fact
Las funciones recursivas se implementan mediante END;
subprogramas recursivos.
Introducción a la programación Introducción a la programación
Tema 8. Introducción a la recursión Tema 8. Introducción a la recursión
Grupo A. Prof. Isabel Pita Grupo A. Prof. Isabel Pita

EJEMPLO RECURSIÓN LINEAL FINAL EJEMPLO RECURSIÓN MÚLTIPLE


Cálculo del mcd de dos números utilizando el algoritmo
Las torres de Hanoi: Se tienen tres palos (A,B,C), el
de Euclides:
primero de ellos (A) contiene una torre de n discos con
Algoritmo : distintos diámetros, de forma que cada disco está situado
a = b -> mcd(a,b) = a sobre un disco de diámetro mayor. El problema consiste
a > b -> mcd(a,b) = mcd(a-b,b) en mover los n discos hasta el palo C utilizando
a < b -> mcd(a,b) = mcd(a,b-a) únicamente como palo auxiliar el B. Nunca debe ponerse
un disco de un diámetro sobre otro de un diámetro menor.
FUNCTION MCD (a,b : Positivo) : Positivo;
BEGIN
Algoritmo:
IF a = b THEN MCD := a
ELSE IF a > b THEN MCD := MCD(a-b,b) • Caso base: n = 1
ELSE MCD := MCD(a,b-a) • Caso recursivo:
END; • Mover los n-1 discos de la torre A a la torre B
utilizando como torre auxiliar la C
a b MCD Caso recursivo • Mover el disco que queda de la torre A a la torre C
75 100 := MCD(75,25) • Mover los n-1 discos de la torre B a la torre C,
a b MCD Caso recursivo utilizando como auxiliar la A.
75 25 := MCD(50,25)
PROCEDURE Mover (n : integer; TI, TA, TF : char);
a b MCD Caso recursivo BEGIN
50 25 := MCD(50,25) IF n = 1 THEN
Writeln(‘Mover disco desde ‘,TI, ‘ a ‘,TF)
a b MCD Caso base ELSE BEGIN
25 25 25 {Mover n-1 discos desde Torre inicial hasta torre auxiliar}
Mover (n-1,TI,TF,TA);
Versión iterativa:
FUNCTION MCD (a,b : Positivo) : Positivo; {Mover el disco inferior}
BEGIN writeln(‘Mover disco desde ‘,TI,’ hasta ‘,TF);
WHILE a <> b DO {Mover n-1 discos desde Torre inicial hasta torre auxiliar}
IF a > b THEN a := a-b Mover (n-1,TA,TI,TF)
ELSE b := b-a; END
MCD := a END;
END;
Introducción a la programación Introducción a la programación
Tema 8. Introducción a la recursión Tema 8. Introducción a la recursión
Grupo A. Prof. Isabel Pita Grupo A. Prof. Isabel Pita
VENTAJAS
• Representa una forma natural de especificar muchos
problemas

INCONVENIENTES
• La ejecución puede resultar poco eficiente
Ejemplo : La sucesión de Fibonacci se define como
Fib(0) = 1;
Fib(1) = 1;
Fib(n) = Fib(n-1) + Fib(n-2)
Algoritmo recursivo para calcular el n-esimo término de la
sucesión
FUNCTION Fib (n : integer) : integer;
BEGIN
IF (n = 0) OR (n = 1) THEN Fib := 1
ELSE Fib := Fib(n-1) + Fib(n-2)
END;

Árbol de llamadas recursivas: Fib(4)

Fib(4)

Fib(3) Fib(2)

Fib(2) Fib(1) Fib(1) Fib(0)

Fib(1) Fib(0)

Introducción a la programación
Tema 8. Introducción a la recursión
Grupo A. Prof. Isabel Pita

También podría gustarte