You are on page 1of 14

Facultad de Ingeniera de Sistemas e Informtica - UNMSM

FUNCIONES

RECURSIVAS

Responsable : Ing. John Ledgard Trujillo Trejo

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

RECURSIVIDAD

Se dice que un proceso es recursivo si se puede definir en


trminos de si mismo, y a dicha definicin se le denomina
definicin recursiva.

La recursividad es una nueva forma de ver las acciones repetitivas


permitiendo que un subprograma se llame a s mismo para resolver una
versin ms pequea del problema original.

La recursividad da al programador una herramienta potente para


resolver ciertos tipos de problemas reduciendo complejidad u
ocultando los detalles del problema.

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

RECURSIVIDAD DIRECTA

La recursividad directa , que es cuando una funcin se llama as


misma la cual considera dos elementos: el Caso Base ( fin de
recursin ) y el Caso General (Parte puramente recursiva).

Caso base: Es el caso ms simple de una funcin recursiva, y devuelve


un resultado. ( el caso base se puede considerar como una salida no
recursiva).

Caso general : Relaciona el resultado del algoritmo con resultados de


casos ms simples. Dado que cada caso de problema aparenta o se ve
similar al problema original, la funcin llama una copia nueva de si
misma, para que empiece a trabajar sobre el problema ms pequeo y
esto se conoce como una llamada recursiva y tambin se llama el paso
de recursin.

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

RECURSIVIDAD DIRECTA: METODO

1. Primero, obtener una definicin exacta del problema a resolver.


(Esto, por supuesto, es el primer paso en la resolucin de cualquier
problema de programacin)

2. A continuacin, determinar el tamao del problema completo que


hay que resolver. Este tamao determinar los valores de los
parmetros en la llamada inicial a la funcin.

3. Tercero, resolver el caso base en el que el problema puede


expresarse no recursivamente. Por ltimo, resolver el caso general
correctamente en trminos de un caso ms pequeo del mismo
problema, una llamada recursiva.

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

RECURSIVIDAD DIRECTA: FACTORIAL

DEFINICIN : Obtener el factorial de un nmero entero,


utilizando la formula:

TAMAO : Los enteros (rango mximo de los enteros)


CASO BASE: 1) Cuando n = 0 devuelvo 1
CASO GENERAL : 2) Cuando se llama a la funcin con un parmetro
disminuido factorial (n - 1)

Caso base

Caso general

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

RECURSIVIDAD DIRECTA: FACTORIAL

Algoritmo Factorial_recursivo
var
entero: i,
inicio
para ( i de 0 a 10) hacer
escribir (factorial( i ))
fin_para
}

// Definicin recursiva de la funcin factorial


entero funcion factorial(entero: numero )
inicio
si ( numero == 0 ) // caso base
devolver(1)
sino // caso recursivo
devolver (numero * factorial( numero - 1 ))
fin

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

TIPOS DE RECURSION

a) Recursividad simple : Aquella en cuya definicin slo aparece una


llamada recursiva. Se puede transformar con facilidad en
algoritmos iterativos.

b) Recursividad mltiple : Se da cuando hay ms de una llamada a s


misma dentro del cuerpo de la funcin, resultando ms difcil de
hacer de forma iterativa.

Ejemplo: Numeros Fibonacci recursivo

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

FIBONACCI RECURSIVO
Algoritmo Fibonacci_recursivo
var
entero: n, i
Inicio
escribir ( "Teclea un entero positivo: )
leer (n)
para (i de 1 a n) hacer
escribir ( i, " esimo termino de Fibonacci es:)
escribir (Fib(i)
fin_para
fin

entero funcion Fib(entero n)


inicio
si (n<= 2) entonces
devolver 1;
sino
devolver ( Fib(n - 1) + Fib(n - 2))
fin
Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo
Facultad de Ingeniera de Sistemas e Informtica - UNMSM

#includeFIBONACCI
<iostream.h> RECURSIVO
#include <iomanip.h>
#include <conio.h>

int Fib(int n);


int main()
{ int i, n; cout << "Teclea un entero positivo: ";
cin>> n;
for (i=1; i<=n; i++)
{ cout << i << " esimo termino de Fibonacci es: ";
cout << Fib(i) << endl;
}
getch();
return 0;
}

int Fib(int n) {
if (n<= 2) return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo
Facultad de Ingeniera de Sistemas e Informtica - UNMSM

FIBONACCI RECURSIVO

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

Hacer un programa para encontrar el equivalente binario de los


nmeros decimales.

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM

AlgoritmoFIBONACCI
Binario_recursivo RECURSIVO
const
entero: BASE = 2
var
entero: n
inicio
escribir ("Introduzca un entero positivo: )
leer (n)
escribir (" El Numero Decimal , n, " es igual a )
ImprimirBinario(n);
escribir ( " en binario )
fin

procedimiento ImprimirBinario(int n)
inicio
si (n > 0) entonces
ImprimirBinario (n/BASE);
escribir (n % BASE)
fin_si
fin

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo


Facultad de Ingeniera de Sistemas e Informtica - UNMSM
#include <iostream.h>
#includeFIBONACCI
<stdlib.h> RECURSIVO
#include <conio.h>

const int BASE = 2;


void PrintBinario(int n);
int main() {
int n;
cout << "Introduzca un entero positivo: ";
cin >> n ; cout << endl;
cout << " El Numero Decimal "<< n <<" es igual a ";
PrintBinario(n);
cout << " en binario " << endl;
getch();
return 0;
}

void PrintBinario(int n) {
if (n > 0) {
PrintBinario (n/BASE);
cout << n % BASE;
}
} I 2016-I
Algortmica Ing. John Ledgard Trujillo Trejo
Facultad de Ingeniera de Sistemas e Informtica - UNMSM

RECURSIVIDAD: VENTAJAS Y DESVENTAJAS

1. La principal ventaja es la simplicidad de comprensin y su gran


potencia, favoreciendo la resolucin de problemas de manera
natural, sencilla y elegante; y facilidad para comprobar y
convencerse de que la solucin del problema es correcta.

2. El cdigo de una funcin recursiva es menor que el de una funcin


iterativa por lo cual es ms fcil su implementacin.

3. El principal inconveniente es la ineficiencia tanto en tiempo como


en memoria, dado que para permitir su uso es necesario
transformar el programa recursivo en otro iterativo, que utiliza
pilas para almacenar las variables.

Algortmica I 2016-I Ing. John Ledgard Trujillo Trejo

You might also like