Sunteți pe pagina 1din 30

FUNDAMENTOS DE

PROGRAMACIÓN

Recursión Generativa
RECURSIÓN
Recordemos:

◉ Recursión: Definir algo en términos de sí mismo.


◉ Dato recursivo: Dato que está compuesto por partes más pequeñas
del mismo tipo, e.g., lista, árbol
◉ Función recursiva: Función que en su cuerpo tiene un llamado a ella
misma.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 2
FUNCIÓN RECURSIVA
Recordemos:

◉ Caso base: Se diseña una respuesta para la(s) entrada(s) más


simple(s).
◉ Caso recursivo: Se llama a la misma función pero con una
modificación de la entrada.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 3
RECURSIÓN ESTRUCTURAL
Es aquella que está guiada por el tipo de dato. Descompone los
parámetros en sus componentes estructurales inmediatos para
procesarlos recursivamente.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 4
RECURSIÓN ESTRUCTURAL
Es aquella que está guiada por el tipo de dato. Descompone los
parámetros en sus componentes estructurales inmediatos para
procesarlos recursivamente.

La modificación de los datos de entrada para el llamado recursivo tiene en


cuenta su estructura.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 5
RECURSIÓN ESTRUCTURAL
Es aquella que está guiada por el tipo de dato. Descompone los
parámetros en sus componentes estructurales inmediatos para
procesarlos recursivamente.

La modificación de los datos de entrada para el llamado recursivo tiene en


cuenta su estructura.

Es decir, la que simplemente recorre paso a paso el dato que está


trabajando. Es más intuitiva.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 6
RECURSIÓN ESTRUCTURAL
Es aquella que está guiada por el tipo de dato. Descompone los
parámetros en sus componentes estructurales inmediatos para
procesarlos recursivamente.

La modificación de los datos de entrada para el llamado recursivo tiene en


cuenta su estructura.

Es decir, la que simplemente recorre paso a paso el dato que está


trabajando. Es más intuitiva.

◉ Si es un número, en el llamado recursivo, se resta o suma de 1 en 1.


◉ Si es una cadena de texto, se quita de a 1 caracter.
◉ Si es lista, se elimina el primer elemento.
◉ Si es árbol, se elimina la raíz.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 7
RECURSIÓN ESTRUCTURAL
Ejemplo:

◉ Factorial
◉ Fibonacci
◉ Sumar elementos de lista de números
◉ ¿?

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 8
RECURSIÓN GENERATIVA
En algunos casos son necesarias funciones basadas en una forma diferente
de recursión.

En este tipo de recursión se divide el problema en partes que permiten


construir una solución. La división se hace sin tener en cuenta la
estructura del tipo de dato, y los llamados recursivos se aplican a estas
partes.

Divide y vencerás.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 9
RECURSIÓN GENERATIVA
Estos mini-problemas pueden ser de dos tipos: los que tienen solución
trivial y los que no.

◉ Un problema con solución trivial será resuelto usando un algoritmo


simple (no recursivo); no requiere dividirse porque su solución es
fácilmente alcanzable.
◉ Un problema con solución no trivial, genera nuevos problemas de
menor tamaño del mismo tipo que el original. Los soluciona y opera
sus soluciones.

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 10
RECURSIÓN GENERATIVA

function recursionGenerativa(dato){
if(trivial(dato)){
solucionTrivial(dato);
}else{
operar(
recursionGenerativa(subDato1),
recursionGenerativa(subDato2),
...
recursionGenerativa(subDatoN),
);
}
}

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 11
RECURSIÓN GENERATIVA
Por ejemplo, un algoritmo para planear un viaje de vacaciones requiere,
generalmente, solucionar pequeños viajes.
Si queremos viajar a París, necesitamos solucionar los siguientes viajes:

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 12
RECURSIÓN GENERATIVA
Por ejemplo, un algoritmo para planear un viaje de vacaciones requiere,
generalmente, solucionar pequeños viajes.
Si queremos viajar a París, necesitamos solucionar los siguientes viajes:
◉ Casa->Aeropuerto

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 13
RECURSIÓN GENERATIVA
Por ejemplo, un algoritmo para planear un viaje de vacaciones requiere,
generalmente, solucionar pequeños viajes.
Si queremos viajar a París, necesitamos solucionar los siguientes viajes:
◉ Casa->Aeropuerto
◉ Cali->Bogotá

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 14
RECURSIÓN GENERATIVA
Por ejemplo, un algoritmo para planear un viaje de vacaciones requiere,
generalmente, solucionar pequeños viajes.
Si queremos viajar a París, necesitamos solucionar los siguientes viajes:
◉ Casa->Aeropuerto
◉ Cali->Bogotá
◉ Bogotá->Madrid

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 15
RECURSIÓN GENERATIVA
Por ejemplo, un algoritmo para planear un viaje de vacaciones requiere,
generalmente, solucionar pequeños viajes.
Si queremos viajar a París, necesitamos solucionar los siguientes viajes:
◉ Casa->Aeropuerto
◉ Cali->Bogotá
◉ Bogotá->Madrid
◉ Madrid->París

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 16
RECURSIÓN GENERATIVA
Por ejemplo, un algoritmo para planear un viaje de vacaciones requiere,
generalmente, solucionar pequeños viajes.
Si queremos viajar a París, necesitamos solucionar los siguientes viajes:
◉ Casa->Aeropuerto
◉ Cali->Bogotá
◉ Bogotá->Madrid
◉ Madrid->París

◉ Cali->París

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 17
GENERATIVA VS. ESTRUCTURAL
Generativa Estructural

◉ Caso trivial y caso recursivo ◉ Caso base y caso recursivo


◉ Caso recursivo= problema ◉ Caso recursivo= componente
más pequeño estructural inmediatamente
◉ Menos operaciones anterior
◉ Más eficiente ◉ Por lo menos tantas
operaciones como el tamaño
del dato
◉ Menos eficiente

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 18
RECURSIÓN GENERATIVA
Ejemplo:

◉ MCD
◉ ¿?

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 19
MCD
ESTRUCTURAL VS. GENERATIVA

¿? ¿?

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 20
MCD
ESTRUCTURAL VS. GENERATIVA
function mcdGenerativa (a,b) {
if(b==0) {
return a;
}else {
return mcdGenerativa (b, (a%b));
}
}

¿?

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 21
MCD
ESTRUCTURAL VS. GENERATIVA
function mcdEstructural(n, m) { function mcdGenerativa(a,b) {
function primerDivisor(i) { if(b==0) {
if (i == 1) { return a;
return 1; }else {
} return mcdGenerativa (b, (a%b));
else { }
if (n % i == 0 && m % i == 0) { }
return i;
}
else {
return primerDivisor(i - 1);
}
}
}
return primerDivisor( Math.min(n,
m));
}

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 22
MCD
ESTRUCTURAL VS. GENERATIVA
mcdEstructural(18,24)

primerDivisor(18)
primerDivisor(17)
primerDivisor(16)
primerDivisor(15)
primerDivisor(14)
primerDivisor(13)

primerDivisor(6)
6

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 23
MCD
ESTRUCTURAL VS. GENERATIVA
mcdGenerativa(18,24)
mcdGenerativa(24,18)
mcdGenerativa(18,6)
mcdGenerativa(6,0)
6

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 24
MCD
ESTRUCTURAL VS. GENERATIVA
mcdEstructural(18,24)
mcdGenerativa(18,24)
mcdEstructural (101135853, 45014640)
mcdGenerativa (101135853, 45014640)
mcdEstructural(10113574329874329874987853939393535487487438
7,4998498984324340984320984320988459845984598459850146408
383838)
mcdGenerativa(10113574329874329874987853939393535487487438
7,4998498984324340984320984320988459845984598459850146408
383838)

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 25
MEDIR TIEMPO
function time() {
var today = new Date();
return today.getTime();
}

var ini = time()


console.log(funcion(parametro))
console.log(time()-ini)

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 26
POTENCIA
ESTRUCTURAL VS. GENERATIVA

¿? ¿?

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 27
POTENCIA
ESTRUCTURAL VS. GENERATIVA

¿?
function power(base, exponent) {
if (exponent == 0) return 1
else return base*power(base,
exponent-1);
}

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 28
POTENCIA
ESTRUCTURAL VS. GENERATIVA
function powerFast(base, exponent){
if (exponent == 0){
return 1
}
if (exponent == 1){
return base
function power(base, exponent) {
}
if (exponent == 0) return 1
if (exponent% 2==1){
else return base*power(base,
return base * powerFast( base *
exponent-1);
base, (exponent- 1) / 2 )
}
}
else{
return powerFast( base * base,
exponent / 2 )
}
}

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 29
ESTRUCTURAL VS. GENERATIVA
Estructural Generativa

◉ Paso a paso ◉ Divide y vencerás


estructuralmente
◉ No siempre se divide en ◉ Subproblemas del mismo tipo
problemas del mismo tipo ◉ El llamado recursivo se hace
◉ El llamado recursivo se hace sobre un dato construido o
sobre un subconjunto calculado a partir del dato de
(subparte) del dato de entrada
entrada

Escuela de Ingeniería de sistemas y computación


Universidad del Valle Slide 30

S-ar putea să vă placă și