You are on page 1of 12

1.

Recursividad en la practica
Hay pocos alumnos en la clase. Cuantos asistieron hoy ?
Comienza el del medio diciendo somos los de mi derecha mas los de mi
izquierda y yo
a.
Luego los de la derecha dice somos los de mi izquierda mas los de mi derecha y
yo
b.
As hasta que el ultimo queda solo y dice solo soy yo (1) c.
Cuantos son si se van dividiendo hasta que quedan grupos de 1 1.
Izquierda ->1 a.
Derecha ->1 b.
Y yo c.
Comienzan a devolver 2.
Todos somos 3
Debe continuar el paso 2 para los grupos sucesivos hasta llegar al primero que dir
los de mi izquierda son M y los de mi derecha son P. En total somos M+1+P
3.
El grupo se divide en dos partes y no se sabe cuantos hay en total.
http://www.grycap.upv.es/gmolto/prg.php
Ejemplo 1: del factorial paso a paso ->

recursivos.
Comprender el funcionamiento de la pila de activacin durante la ejecucin del
algoritmo recursivo

Entender el algoritmo recursivo de calculo del factorial -> Factorial de un numero


Analizar la gestin de la pila de recursin ante mtodos con recursin Lineal no final.
Anlisis de Caso base --> Soluciona sin llamarse a si mismo. No tiene llamada
recursiva. Con este es posible que el algoritmo sea FINITO.

Anlisis del caso general --> Solucin de un problema en trminos de un


problema mas pequeo. Llama a si mismo.

Ecuacin de recurrencia.
Plantear el perfil a partir del anlisis en funcin a un caso general y otro base 1.
Disear el algoritmo recursivo de calculo del factorial 2.
Parmetros de entrada
Parmetros de salida
int fac=factorial(num) --> donde num>=0
a. Perfil del mtodo
Caso Base
Caso General
factorial(num)
1 num =0
num*factorial(num-1) num>0
b. Anlisis de casos (vase la ecuacin de recurrencia)
if () //caso base
else //Caso General
c. Transcripcin a c++
Validacin del algoritmo 3.
int factorial(int nro){
Objetivo: Comprender el procedimiento para el anlisis y diseo de algoritmos
Fundamentos Tericos 1.
Apuntes Recur pgina 1
//int res=1;
if(nro==0){
return 1;
}else{
//res= nro*factorial(nro-1);
return nro*factorial(nro-1);
}
//return res;
}
Mostrar la pila de activacin que se forma por cada llamada recursiva
Sirve para ver que se guarda (direccin de memoria + valor de
parmetros)

Aqu se refleja lo que pasa en cada RETURN


Seguir paso a paso apilando las cajas -
Toca el caso base --> Inicia el des apilado. -
int factorial(int nro){
Conclusion 4.
1. Se ha creado el perfil del algoritmo recursivo
2. Anlisis de casos
3. Transcripcin a c++
4. Validacin.
Ejemplo 2: Serie de Fibonacci paso a paso ->
Comprender el funcionamiento de la pila de activacin durante la ejecucin del
algoritmo recursivo
-
Entender el algoritmo recursivo de calculo del Mismo termino de la serie de
Fibonacci
-
Analizar la gestin de la pila de recursin ante mtodo con recursin mltiple que
generan un rbol de llamas recursivas.
-
Fib(4)= 1 1 2 3 5
Analisis 1.
Objetivo:
int Fib(int n){
if (n<2) return 1;
else return Fib(n-1)+Fib(n-2);
}
rbol de llamadas recursivas. parte de la raz fib(4) a.

n=4
return
(fib(3)+fib(2))

fi(3)
n=3
return (fib(2) + fib(1))
fib(2)
n=2
return (fib(1) + fib(0))
fib(2)
n=2
return (fib(1) + fib(0))
fib(1)
return 1
fib(1)
return 1
Fib(0)
return 1
Apuntes Recur pgina 2
El primer registro de activacin en crearse ES EL ULTIMO en terminar . -
Se tiene que calcular los dems para encontrar el resultado. -
Enumerar los registros de activacin para entender como acaba cada llamada
recursiva.
a.
Apuntes Recur pgina 3
Algoritmo del factorial de un numero entero positivo
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo del calculo del factorial 4.
Objetivo:
Anlisis del Algoritmo 1.
Para calcular el factorial de 4
4! = 4 * 3! = 24
3! = 3 * 2! = 6
2! = 2 * 1! = 2
1! = 1 * 0! = 1
0! = 1
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Int num = Factorial ( int numero)
0! = 1 --> Este es el caso base 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine
en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

Factorial (n) {
1 n=0 ;
n * factorial (n-1) n>0
Anlisis de casos b.
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
int factorial(int nro){
if(nro==0){
return 1;
}else{
//int res= nro*factorial(nro-1);
//return res;
Diseo del Algoritmo 2.
Metodologa:
Modelo 1 : Siguiendo un algoritmo recursivo Simple
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 4
//return res;
return nro*factorial(nro-1);
}
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
N es 3
FACTORIAL 3* FACTORIAL (2)
Retorno 6
N es 2
FACTORIAL 2* FACTORIAL (1)
Retorno 2
N es 1
FACTORIAL 1* FACTORIAL (0)
Retorno 1
N es 0
FACTORIAL 1
Retorno 1
FACT FACTORIAL (3)
Ciclo del Factorial Recursivo
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda
(direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 5
Algoritmo para encontrar el Nsimo termino de la serie de Fibonacci
Comprender el funcionamiento de la pila de activacin durante la ejecucin del
algoritmo recursivo
1.
Entender el algoritmo recursivo de calculo del Nsimo termino de la serie de
Fibonacci
2.
Analizar la gestin de la pila de recursin ante mtodos con recursin mltiple
que generan un rbol de llamas recursiva.
3.
Objetivo:
Metodologa:
Anlisis del Algoritmo 1.
Para calcular el Fibonacci de 5
1 1 2 3 5
rbol de llamadas recursivas. parte de la raz
f5
f3 f4
f1 f2
f0 f1
f2
f0 f1
f3
f1 f2
f0 f1
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Int num = Fibonacci ( int numero)
Fibonacci (0) = 1 --> Este es el caso base 1)
Fibonacci (1) = 1 --> Este es el caso base 2)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo
termine en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.
Fibonacci (n) {
1 n<2 ;
Fibonacci(n-1) + Fibonacci (n-2) n>=2
Anlisis de casos b.
Codificacin en C++ c.
Diseo del Algoritmo 2.
Modelo 2: Siguiendo un algoritmo recursivo mltiple
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 6
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
int Fibonacci(int n){
if (n<2) return 1;
else return Fibonacci(n-1)+Fibonacci(n-2);
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
3.
4.
Enumerar los registros de activacin para entender como acaba cada llamada
recursiva.

El primer registro de activacin en crearse ES EL ULTMO en terminar


Secuenciacin en clase:
Apuntes Recur pgina 7
El primer registro de activacin en crearse ES EL ULTMO en terminar
Se tubo q calcular los dems para encontrar su resultado.
Apuntes Recur pgina 8
Algoritmo de la potencia de un numero entero positivo
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo del calculo de la potencia de un numero 4.
Objetivo:
Anlisis del Algoritmo 1.
3^0 = 1
0^0=1
1^1 = 1
555551111^1 = 555551111
0^1000=0
3^4 = 3 * 3 * 3 * 3 = 81 --> Multiplicar pos si mismo 4 veces
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Int num = Potencia ( int numero, int pot)
x^0 = 1 --> Este es el caso base 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine
en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

Potencia (n,p) {
1 pot=0 ;
n * Potencia (n,pot-1) pot>0 ;
Anlisis de casos b.
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
unsigned int Potencia(int num,int pot){
Diseo del Algoritmo 2.
Metodologa:
Modelo 3: Siguiendo un algoritmo con mas de un caso base
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 9
unsigned int Potencia(int num,int pot){
return 1;
if(pot ==0 ){
if (pot ==1)
return num;
else
if(num == 0)
return 0;
else return num * Potencia(num,pot-1);
}else{
}
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
Graficar la pila de registros de activacion para el algorimo
Num=2
Pot=3
Num * Potencia(num,pot-1)
Num=2
Pot=2
Num * Potencia(num,pot-1)
Num=2
Pot=1
Num * Potencia(num,pot-1)
Paso1
Paso2
Paso3
Retorna 2
Paso4
Retorna 4
Paso5
Retorna 8
8
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda
(direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 10
Algoritmo para obtener contar los digitos de un numero en base 10
Comprender el procedimiento de mtodos recursivos 1.
Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General 2.
Conocer la validacin y terminacin de un algoritmo recursivo 3.
Analizar el algoritmo recursivo para obtener el binario de un numero en base 10 4.
Objetivo:
Anlisis del Algoritmo 1.
501 => Cuantos digitos ?
501 / 10 =50
50 / 10 =5
5 / 10 =0
Se dividio entre 10 3 veces
Luego tiene 3 digitos.
Tipo: Funcin o Proceso i.
Tipos de datos que entran 1)
Tipo de dato que retorna si es Funcin. 2)
Parmetros ii.
Perfil del mtodo: Identificar a.
Unsigned Int dig = CuentaDig (unsigned int num)
num < 10 --> Este es el caso base , tiene 1 digito 1)
Caso Base : El algoritmo no se llama a si mismo. Permite que el
algoritmo termine en algn momento
i.
Caso General : El mtodo se llama a si mismo ii.

CuentaDig (num) {
1 num<10 ;
CuentaDig (num/10) + 1 num>=10 ;
Anlisis de casos b.
Codificacin en C++ c.
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
int CuentaDig(int num){
return 1;
if (num<10) {
Diseo del Algoritmo 2.
Metodologa:
Modelo 4: Siguiendo un algoritmo Numrico
viernes, 28 de marzo de 2014
16:51
Apuntes Recur pgina 11
return 1;
return CuentaDig(num/10)+1;
}else{
}
}
Validacin del algoritmo : Observar si termina y resuelve el problema d.
Graficar la pila de registros de activacion para el algorimo, si gusta con el
siguiente algoritmo equivalente.
int CuentaDig(int num){
return 1;
if (num<10) {
int res= CuentaDig(num/10);
res=res+1;
return res;
}else{
}
}
Num=546
CuentaDig(num/10) + 1
Num=54
CuentaDig(num/10) + 1
Num=5
CuentaDig(num/10) + 1
Paso1
Paso2
Paso3
Retorna 1
Paso4
Retorna 2
Paso5
Retorna 3
3
Secuenciacin en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah
se guarda (direccin de memoria + valor del parmetros)
1.
Aqu se refleja lo que pasa en cada RETURN 2.
Comienza desde el caso base el des Apilado. 3.
Apuntes Recur pgina 12

You might also like