Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DITE-UNEFM
______________________________________________________________________________________
Recursividad: La recursividad es una técnica de programación que se utiliza para realizar una
llamada a una función desde la misma función “una función se llama a si misma”, es por lo tanto
un bucle que debe tener una manera de terminar.
int suma(int n)
{ n (n==1) n+suma(n-1) suma(n-1) Retorna
if(n==1)
{ 4 No 4+suma(3) 6 10
return 1;
}
else 3 No 3+suma(2) 3 6
{
return n+suma(n-1); 2 No 2+suma(1) 1 3
}
} 1 Si - - 1
Cuando se llama a una función desde la misma función, ésta almacena todas las variables y
demás datos que necesita para completar la función en un bloque interno.
La siguiente vez que es llamada la función hace exactamente lo mismo, creando otro bloque
interno, este ciclo se repite hasta alcanzar la última llamada de la función, entonces empieza a
regresar los bloques utilizando estos para completar cada llamada.
Tipos de Recursión.
Recursividad Simple: Aquella en cuya definición sólo aparece una llamada recursiva.
double factorial(int num)
{
if(num<=1)
return 1;
else
return(num*factorial(num-1));
}
4 No 4*factorial(3) 6 24
3 No 3*factorial(2) 2 6
2 No 2*factorial(1) 1 2
1 Si - - 1
Recursividad Múltiple: cuando hay más de una llamada a si misma dentro del cuerpo de
la función.
int fibo (int n)
{
if(n<=1)
return 1;
else
return (fibo(n-1)+fibo(n-2));
}
4 No fibo(3)+fibo(2) 3 2 5
3 No fibo(2)+fibo(1) 2 1 3
2 No fibo(1)+fibo(0) 1 1 2
1 Si - - - 1
1 0 No Si Ack(0,1) - - -
0 1 Si - - - - 2
Ack(0, 2)
0 2 Si - - - - 3
Recursividad Cruzada o Indirecta: son algoritmos donde una función provoca llamada
a si misma de forma indirecta a través de otras funciones.
Función 1
int par(int nump)
{
if(nump==0)
return 1;
else
return (impar(nump-1));
}
Función 2
int impar (int numi)
{
if(numi==0)
return 0;
else
return(par(numi-1));
}
4 - No - impar(3) - 1
- 3 - No - par(2) 1
2 - No - impar(1) - 1
- 1 - No - par(0) 1
1
0 - Si - - -
(verdadero)
3 - No - impar(2) -
- 2 - No - par(1)
1 - No - impar(0) -
0
- 0 - Si - -
(Falso)
Algunos Ejemplos
Ejemplo 1: Cree un programa que calcule la suma de los primero n número enteros a partir de un valor
dado. Sume los valores usando una función recursiva.
#include <iostream>
using namespace std;
int suma(int n);
int main()
{
int n, s;
cout << "Introduzca el ultimo valor: ";
cin >> n;
s=suma(n);
cout << "La suma de los primeros " << n << " numero enteros es " << s << "\n";
system("pause");
return 0;
}
int suma(int n)
{
if(n==1) //indica cuando termina la función
{
return 1;
}
else
{
return n+suma(n-1); //llama la función, restándole uno al indicador 'n'
}
}
Ejemplo 2: Cree un programa que calcule, usando una función recursiva, el factorial de un número dado:
#include<iostream>
using namespace std;
double factorial(int num);//prototipo
int main()
{
int num; //variables locales
system("clear");
cout << "Obtener el Factorial de:\n";
cin >> num;
cout << "El Factorial de "<< num <<" es..."<<factorial(num);//llamado de función
cout << "\n";
system("pause");
}
x2 x3 x4 n x
n
b) y= 1 − x+ − + + ... + (−1)
2! 3! 4! n!
c) p=(f1*f2*…*fn)
4.- Mostrar el inverso de un número leído, por ejemplo: número: 526… inverso: 625
5.- Dividir dos números enteros.