Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMACIÓN II
RECURSIVIDAD
2013
Recursividad
int main() {
muestraMensaje();
}
void muestraMensaje() {
cout<<("Hola!");
muestraMensaje();
}
}
int main() {
muestraMensaje(0);
}
void muestraMensaje(int i) {
if ( i < 3 ) {
cout<<("Hola!");
muestraMensaje(i + 1);
}
else {
cout<<("Chao!");
}
}
}
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
Potencia
x0 = 1 caso base
xn = x · xn−1 caso recursivo
Factorial
0! = 1 caso base
n! = n · (n − 1)! caso recursivo
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
factorial(0) -> 1
factorial(1) -> 1*factorial(0)
factorial(2) -> 2*factorial(1)
factorial(3) -> 3*factorial (2)
… -> …
factorial(N) -> 3*factorial (N-1)
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.