Está en la página 1de 13

UMNG

PROGRAMACIÓN II

RECURSIVIDAD

ING. ELKIN VELÁSQUEZ

2013
Recursividad

¿Puede llamarse una función a si misma?


Qué pasa si hacemos lo siguiente:

int main() {
muestraMensaje();
}
void muestraMensaje() {
cout<<("Hola!");
muestraMensaje();
}
}

¿Cómo podemos hacer para que se llame solo una cantidad


fija de veces a la función?
Recursividad
Veamos qué pasa si hacemos lo siguiente:

int main() {
muestraMensaje(0);
}
void muestraMensaje(int i) {
if ( i < 3 ) {
cout<<("Hola!");
muestraMensaje(i + 1);
}
else {
cout<<("Chao!");
}
}
}

¿Cuántas veces se muestra el mensaje?


Recursividad
Podemos hacerlo al inverso también:

int main() {
int n;
cin>> n;
muestraMensaje(n);
}
void muestraMensaje(int i) {
if ( i > 0 ) {
cout<< ("Hola!");
muestraMensaje(i - 1);
}
else {
cout<<("Chao!");
}
}
}
Ahora muestra el mensaje dependiendo de lo que ingresa el usuario.
Recursividad
¿Qué hace el siguiente código?

int main() {
int s, n;
cin>>n;
s = sumatoria(n);
cout<<(s);
}

int sumatoria(int i) {
int j;
if ( i == 0 ) {
return 0;
}
else {
j = sumatoria(i - 1) + i;
return j;
}
}
}
Recursividad

La idea de recursividad en matemáticas tiene que ver con funciones


que son definidas en términos de sí mismas.

Potencia

x0 = 1 caso base
xn = x · xn−1 caso recursivo

Factorial
0! = 1 caso base
n! = n · (n − 1)! caso recursivo

Veamos cómo sería el código en C++


Recursividad - potencia

int main() {
int x, n, p;
cin>>x;
cin>>n;
p = potencia(x,n);
cout<<p;
}
int potencia(int x, int n) {
int p;
if ( n == 0 ) {
return 1;
}
else {
p = x * potencia(x, n - 1);
return p;
}
}
}
Recursividad: potencia otra versión

int main() {
int x, n, p;
cin>>x;
cin>> n;
p = potencia(x,n);
cout<<p;
}
int potencia(int x, int n) {
if ( n == 0 ) {
return 1;
}
else {
return (x * potencia(x, n - 1));
}
}
}
Introducción

 El concepto de recursividad va ligado al de


repetición.

 Son recursivos aquellos algoritmos que, estando


encapsulados dentro de una funcióm, son llamados
desde el mismo una y otra vez.

 En contraposición a los algoritmos iterativos, que


hacen uso de bucles while, do-while, for, etc.
Concepto de Recursividad

 Algo es recursivo si se define en términos de sí mismo


(cuando para definirse hace mención a sí mismo).

 Para que una definición recursiva sea válida, la


referencia a sí misma debe ser relativamente más
sencilla que el caso considerado
Elementos de Recursión
Axioma: Es un caso donde el problema puede resolverse sin tener que
hacer uso de una nueva llamada a sí mismo. Evita la continuación indefinida
de las partes recursivas.

Formula recursiva: Relaciona el resultado del algoritmo con resultados


de casos más simples. Se hacen nuevas llamadas al método, pero están más
próximas al caso base.
Por ejemplo: El factorial de un número

factorial(0) -> 1
factorial(1) -> 1*factorial(0)
factorial(2) -> 2*factorial(1)
factorial(3) -> 3*factorial (2)
… -> …
factorial(N) -> 3*factorial (N-1)

En la resolución de algoritmos recursivos es imprescindible encontrar


estos dos elementos.
Tipos de Recursión
Recursividad simple
Aquella en cuya definición sólo aparece una llamada recursiva. Se puede
transformar con facilidad en algoritmos iterativos.

Recursividad múltiple
Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la
función, resultando más difícil de hacer de forma iterativa. Un ejemplo
típico es la función de fibonacci

Recursividad anidada
En algunos de los argumentos de la llamada recursiva hay una nueva
llamada a sí misma. Consultar la función de Ackermann.

Recursividad cruzada o indirecta


Son algoritmos donde una función provoca una llamada a sí misma de
forma indirecta, a través de otras funciones.
Actividad

1. Elaborar un programa en C++ para hallar el factorial de un


número dado mediante procesos de Recursividad

2. Elaborar un programa en Java para hallar la serie de fibonacci


mediante procesos de Recursividad

La función de Fibonacci también tiene una definición recursiva:

F(0) = 0 caso base


F(1) = 1 caso base
F(n) = F(n − 1) + F(n − 2) caso recursivo

Tenemos dos casos base!

La función de Fibonnaci tiene un código en C++ recursivo muy natural

También podría gustarte