Sei sulla pagina 1di 9

U. A. G. R.

M
UNIVERSIDAD AUTONOMA GABRIEL
RENE MORENO
Facultad Ciencias de la computacin
Carrera de Sistemas
Semestre I/2017

Apuntes 2 : Recursividad.

Ing. Mary Lpez N.

Apuntes Recur pgina 1


ndice

1. Fundamentos Tericos
a. Caso de Estudio: Series Numricas
b. Ejemplo de una Recursin void
c. Ejemplo de una Funcin Recursiva

2. Ejemplos Numricos: step by step

3. Ejemplos Cadenas de caracteres: step by step

4. Ejemplos con Vectores

5. Ejemplos con Matrices

BIBLIOGRAFIA

1. Programacin en C++ con C++Builder.


Angel A. Zeitoune y Ricardo A. Rettore. 2005
2. Aprenda C++ Como si estuviera en primero.
Garca, Rodrguez,Sarriegui y Brazales
3. Fundamentos de Algoritmia.
Brassard Bratley

WEBGRAFIA

1. Programacin en C++ como si estuviera en primero


http://mat21.etsii.upm.es/ayudainf/aprendainf/Cpp/
manualcpp.pdf

Apuntes Recur pgina 2


1. Fundamentos Tericos

1. Recursividad en la practica
Hay pocos alumnos en la clase. Cuantos asistieron hoy ?
El grupo se divide en dos partes y no se sabe cuantos hay en total.
1. Cuantos son si se van dividiendo hasta que quedan grupos de 1
a. Comienza el del medio diciendo somos los de mi derecha mas los de mi izquierda y yo
b. Luego los de la derecha dice somos los de mi izquierda mas los de mi derecha y yo
c. As hasta que el ultimo queda solo y dice solo soy yo (1)
2. Comienzan a devolver
a. Izquierda ->1 Derecha ->1 Y yo = Todos somos 3
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
http://www.grycap.upv.es/gmolto/prg.php

Plantilla: Mtodo para lograr recursiones


Objetivo: Comprender el procedimiento para el anlisis y diseo de algoritmos
recursivos.
Comprender el funcionamiento de la pila de activacin durante la ejecucin del algoritmo
recursivo
Entender el algoritmo recursivo.

1. Anlisis del Problema


Encontrar Cmo solucionar el problema . Como lo puedo dividirlo.
2. Disear el algoritmo
a. Perfil del mtodo
Parmetros de entrada
Parmetros de salida
Proceso o Funcin
b. Anlisis de casos
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.

c. Transcripcin a c++
if () //caso base
else //Caso General

3. Validacin del algoritmo


- Seguir paso a paso apilando las cajas
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
- Toca el caso base --> Inicia el des apilado.

4. Conclusion
1. Anlisis del Problema
2. Diseo del algoritmo.
3. Validacin.

Apuntes Recur pgina 3


Caso de Estudio: Series Numricas

Series Numricas
Lo Primero que debe hacer es enumerar posiciones de cada elemento en la serie y reconocerla
como una de los siguientes tipos:

Sucesin Aritmtica --> Sumando o restando un valor constante


3 5 7 9 11
Luego la frmula del trmino Ensimo es:
An=A1 + (n-1)*d
Donde:
A1= Es el primer elemento de la serie (3)
d = Diferencia del segundo menos el primero (2)
n = El elemento de la serie a calcular (4)
A3=3 + (4-1)*2 =9

Sucesin geomtrica --> Multiplicando por una razn


1 2 4 8 16
Luego la frmula del trmino ensimo es:
An=A1 * R(n-1)
Donde:
A1= Es el primer elemento de la serie (1)
R = Es la razn y es el valor por el que se multiplica para avanzar (2)
n = El elemento de la serie a calcular (4)
A4=1 * 2(4-1)

Sucesin que se factor iza --> Tienen un factor comn que comparten.
2 5 10 17 26
Luego la frmula del trmino ensimo es:

An=(n2 + 1)

Donde:
n = El elemento de la serie a calcular (2)
A2=(22 + 1)

Cuadrtica an2 +bn +c --> Resulta ser una serie aritmtica recin el en segundo nivel .

Si reemplazamos en la frmula de la cuadrtica para n=1 --> a+b+c


Si reemplazamos en la frmula de la cuadrtica para n=2 --> 4a+2b+c
Si reemplazamos en la frmula de la cuadrtica para n=3--> 9a+3b+c

Apuntes Recur pgina 4


As si la serie es:

4 12 26 46 --> a+b+c =4 --> c=2


8 14 20 --> 3a+b =8 --> b=-1
6 6 --> 2a =6 --> a=3
Luego, si reemplaza en la frmula de la cuadrtica obtenemos la frmula del termino ensimo
de la serie.

an2 +bn +c = 3n2 - n +2

Luego, si saca sumatorio obtiene el total de la suma de los N elementos de la serie numerica.

i=n
(3n2 -n +2) --> Algoritmos que suma con ciclo repetitivo.
i=1

Serie Cubica: an3 + bn2 +cn +d Resulta ser una serie aritmtica recin en el tercer nivel.

Desafo: Obtenga las formulas de la misma forma que la serie cuadrtica


2 + 16 + 54 + 128 + ......2000

Apuntes Recur pgina 5


Void: Generar el ensimo de la serie
viernes, 28 de marzo de 2014 16:51

2 4 12 24 72

Objetivo:
1. Comprender el procedimiento de mtodos recursivos
2. Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General
3. Conocer la validacin y terminacin de un algoritmo recursivo
4. Analizar el algoritmo recursivo del clculo del trmino ensimo de una serie.

Metodologa:
1. Anlisis del Algoritmo
2 *2 = 4 (2do) --> par
4*3=12 (3ro) --> impar
12*2=24
24*3=72

2. Diseo del Algoritmo


a. Perfil del mtodo: Identificar
i. Proceso
ii. Parmetros
1) Entrada:
n-> posicin trmino de la serie numrica
k-> trmino ensimo de la serie

Serie ( int n, int &k)


b. Anlisis de casos
i. Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine en algn momento
1) Si n=1 --> Este es el caso base , luego K=2
ii. Caso General : El mtodo se llama a si mismo

i. Serie (n,k) { 2

Serie (n-1,k)
n=1;

n>1

c. Codificacin en C++

void serie(int n,int &k){


if (n==1) {
k=2;
} else {
serie(n-1,k);
if ((n % 2 )== 0)
k=k*2;
else k=k*3;

}
}

Apuntes Recur pgina 6


else k=k*3;

}
}

d. Validacin del algoritmo : Observar si termina y resuelve el problema

Secuenciacin en clase:

1. Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda (direccin de
memoria + valor del parmetros)
2. Aqu se refleja lo que pasa en cada RETURN
3. Comienza desde el caso base el des Apilado.

Apuntes Recur pgina 7


Funcion: Generar el ensimo de la serie
viernes, 28 de marzo de 2014 16:51

2 4 12 24 72

Objetivo:
1. Comprender el procedimiento de mtodos recursivos
2. Especificar los casos de anlisis de algoritmos recursivos: Caso base y Caso General
3. Conocer la validacin y terminacin de un algoritmo recursivo
4. Analizar el algoritmo recursivo del clculo del trmino ensimo de una serie.

Metodologa:
1. Anlisis del Algoritmo
2 *2 = 4 (2do) --> par
4*3=12 (3ro) --> impar
12*2=24
24*3=72

2. Diseo del Algoritmo


a. Perfil del mtodo: Identificar
i. Funcin
ii. Parmetros
1) Entrada:
n-> posicin trmino de la serie numrica
2) Salida: Retorna un entero que es el ensimo trmino de la serie

Int num = Serie ( int n)

b. Anlisis de casos
i. Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine en algn momento
1) Si n=1 --> Este es el caso base , luego K=2
ii. Caso General : El mtodo se llama a si mismo

i. Serie (n) { 2

Serie (n-1)
n=1;

n>1

c. Codificacin en C++

int serie(int n){


if (n==1) {
return 2;
} else {
if ((n % 2 )== 0)
return (serie(n-1)*2);
else
return (serie(n-1)*3);
}
}

Apuntes Recur pgina 8


else
return (serie(n-1)*3);
}
}

d. Validacin del algoritmo : Observar si termina y resuelve el problema

Secuenciacin en clase:

1. Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ah se guarda (direccin de
memoria + valor del parmetros)
2. Aqu se refleja lo que pasa en cada RETURN
3. Comienza desde el caso base el des Apilado.

Apuntes Recur pgina 9

Potrebbero piacerti anche