Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
M
UNIVERSIDAD AUTONOMA GABRIEL
RENE MORENO
Facultad Ciencias de la computacin
Carrera de Sistemas
Semestre I/2014
Apuntes 2 : Recursividad.
Ing. Mary Lpez N.
Apuntes Recur pgina 1
Fundamentos Tericos 1.
Ejemplos step by step 2.
Ejercicios Resueltos 3.
BIBLIOGRAFIA
Programacin en C++ con C++Builder. 1.
Angel A. Zeitoune y Ricardo A. Rettore. 2005
Aprenda C++ Como si estuviera en primero. 2.
Garca, Rodrguez,Sarriegui y Brazales
Fundamentos de Algoritmia. 3.
Brassard Bratley
Programacin en C++ como si estuviera en primero 1.
http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/
manualcpp.pdf
WEBGRAFIA
ndice
Apuntes Recur pgina 2
1. Recursividad
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 c.
Cuantos Somos dividindose hasta que quedan grupos de 1 1.
Comienzan a devolver 1 + 1 y yo somos 3 hasta llegar al primero para tener el 2.
Total de alumnos del grupo
INICIAR haciendo el ejercicio de grupo que se divide en 2 partes y no sabemos cuantos somos en el
grupo hoy.
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
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
if () //caso base
else //Caso General
c. Transcripcin a c++
Validacin del algoritmo 3.
//int res=1;
if(nro==0){
return 1;
}else{
//res= nro*factorial(nro-1);
return nro*factorial(nro-1);
}
int factorial(int nro){
Objetivo: Comprender el procedimiento para el anlisis y diseo de algoritmos
Fundamentos Tericos 1.
Apuntes Recur pgina 3
}
//return res;
}
Conclusion 4.
1. Se ha creado el perfil del algoritmo recursivo
2. Anlisis de casos
3. Transcripcin a c++
4. Validacin.
Seguir paso a paso con las cajas -
Esta sirve para ver que se guarda (direccin de memoria + valor del parmetros) -
Aqu se refleja lo que pasa en cada RETURN -
Comienza desde el caso base el des apilado. -
Mostrar la pila que se forma por cada llamada recursiva -
3. Ejemplo de serie Fibonacci paso a paso ( Recursin Mltiple 2 llamas recursivas)
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.
-
Analysis 1.
Objetivo:
Fib(4)= 1 1 2 3 5
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
retur 3+2
fi(3)
n=3
retur ?
...
fib(2)
n=2
return 1+1
if(1) fib (0)
return 1 return 1
El primer registro de activacin en crear ES EL ULTMO en terminar . Se tubo q calcular
los dems para encontrar su resultado.
-
Enumerar los registros de activacin para entender como acaba cada llamada recursiva. a.
Apuntes Recur pgina 4
Modelo 1 : Siguiendo un algoritmo recursivo Simple 1.
Modelo 2: Siguiendo un algoritmo recursivo mltiple 2.
Modelo 3: Siguiendo un algoritmo con mas de un caso base 3.
Modelo 4: Siguiendo un algoritmo Numrico 4.
Modelo 5: Siguiendo un algoritmo Numrico 5.
Ejemplos step by step
Apuntes Recur pgina 5
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 6
//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 7
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 8
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.