Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recursin
Universidad ORT
Uruguay
AGENDA
Introduccin
Motivacin
Ejemplos
Pila de llamados
OBJETIVOS
Entender el concepto de recursividad.
Segn la RAE
Volver una cosa al sitio dnde sali, retornar, repetirse, reaparecer.
En trminos de programacin
Un mtodo es recursivo si directa o indirectamente realiza una
llamada a si mismo.
Diferente a la circularidad.
MOTIVACIN
Forma natural, lgica
n! = 1 * 2 * 3 * 4 * (n-1)*n
1, si n = 0
n! =
n*(n-1)!, si n>=1
RECURSIVO VS. ITERATIVO
[FACTORIAL]
FactorialIterativo FactorialRecursivo
Definicin de funcin
int factorial factorial
(int n){ int factorial (int n){
int f = 1; if n = 0
Fact
for (int i=2; (0)i =
i<=n; ++)1 return 1;
{ Fact (n) = n * Fact
else(n-1)
f = f * i; return n*factorial(n-1);
} }
return f;
}
MOTIVACIN
Forma natural, lgica
//Pre: n>=0
int Fib (int n){
if (n <= 1)
return n;
fib(5)
fib(4) + fib(3)
(fib(3) + fib(2)) + (fib(2) + fib(1))
((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
(((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) +
fib(1))
//PRE: n>=0
int Fib2I (int [] T; int n){
if (n == 0)
return 0;
if (n == 1)
return 1;
T[0] = 0;
T[1] = 1;
for (int i = 2; i <= n; i++){
T[i] = T[i-1] + T[i-2];
}
return T[n];
} 0 0
1 0
1 0
2 0
3 0
5 0
8 13
0 21
0 34
0
FIBONACCI POSIBLES MEJORAS
Almacenar en una tabla los resultados obtenidos. De
esta forma, si queremos calcular fib(n) preguntaremos
previamente si dicho valor ya fue calculado.
Potencia (x, 0) = 1
Potencia (0, y) = 0
yveces
1
Potencia (x, y) con y < 0 =
Potencia ( x, y )
EJEMPLO: POTENCIA
int potencia (int x, int y){
if (y = 0)
return 1;
else if (x = 0)
return 0;
else if (y > 0)
return x * potencia(x, y-1);
else // (y < 0)
return 1/potencia(x, -y);
}
PILA DE LLAMADOS POTENCIA
(NMEROS POSITIVOS)
VARIABLES X = 2, Y = 3
VARIABLES X = 2, Y = 2
VARIABLES X = 2, Y = 1
VARIABLES X = 2, Y = 0
VARIABLES X = 2, Y = 1
VARIABLES X = 2, Y = 2
VARIABLES X = 2, Y = 3
2. Cada paso consiste en una nueva divisin, en la que el dividendo es el nmero que
actu de divisor en la divisin anterior y el divisor es el nmero que se obtuvo
como resto en la divisin anterior.
3. Cuando en una divisin se obtiene resto nulo, el mximo comn divisor de los
nmeros de los que partimos ser el nmero que ha actuado como divisor en esa
ltima divisin efectuada y que result ser una divisin exacta.
public int MCDI(int a, int b){ public int MCDR(int a, int b){
int resto = a%b; int resto = a%b;
while (resto!=0){ if(resto==0){
a=b;
return b;
b=resto;
resto = a % b; }else{
} return MCDR(b, resto);
return b; }
}
}
EJERCICIO: ADOQUINES
Alprincipiodeljuegolosniosseubicaneneladoqunnumerado0.
Irdeunadoqunnumeradoialadoqunnumeradoi+1.
Irdeunadoqunnumeradoialadoquni+2(saltendoseeladoquni+1).
Sepidecalcularelnmerodecaminosposiblesparaalcanzarunadoqunobjetivo
numeradoconn(mayorquecero).
0 1 2 N N+1
ADOQUINES
1 58
1
= 54 3 =
2 5 +
0 3+ 3 4
2 3
2 2 2
1
1 0 1
0 0
=3
1 3 5 6
2+
8 3+
2 =1 5
1 4
0 3
2
1
0
EJERCICIO: ADOQUINES
adoquines (1) = 1;
adoquines (2) = 2;
if(n = 1)
return 1;
if(n = 2)
return 2;
1 0 0 1 0 1 0 0 0 1 1
2 0 1 0 0 1 1 1 0 0 0
3 0 1 0 0 0 0 0 1 0 0
4 0 0 1 0 1 0 1 0 0 1
5 0 0 1 0 1 0 1 0 0 1
6 0 0 1 0 1 0 1 0 0 1
7 0 0 0 1 1 1 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 1 1 0 0 0 1 0 cantIslas=1
1 0 0 1 0 1 0 0 0 1 1
2 0 1 0 0 1 1 1 0 0 0
3 0 1 0 0 0 0 0 1 0 0
4 0 0 1 0 1 0 1 0 0 1
5 0 0 1 0 1 0 1 0 0 1
6 0 0 1 0 1 0 1 0 0 1
7 0 0 0 1 1 1 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 1 1 0 0 0 1 0 cantIslas=1
1 0 0 1 0 1 0 0 0 1 1
2 0 1 0 0 1 1 1 0 0 0
3 0 1 0 0 0 0 0 1 0 0
4 0 0 1 0 1 0 1 0 0 1
5 0 0 1 0 1 0 1 0 0 1
6 0 0 1 0 1 0 1 0 0 1
7 0 0 0 1 1 1 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 1 0 cantIslas=1
1 0 0 0 0 0 0 0 0 1 1
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 1
5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 0 0 0 0 0 0 1
7 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 1 0 cantIslas=2
1 0 0 0 0 0 0 0 0 1 1
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 1
5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 0 0 0 0 0 0 1
7 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 1 0 cantIslas=2
1 0 0 0 0 0 0 0 0 1 1
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 1
5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 0 0 0 0 0 0 1
7 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=2
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 1
5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 0 0 0 0 0 0 1
7 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=3
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 1
5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 0 0 0 0 0 0 1
7 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=3
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 1
5 0 0 0 0 0 0 0 0 0 1
6 0 0 0 0 0 0 0 0 0 1
7 0 0 0 0 0 0 0 0 1 0
8 0 0 0 0 0 0 0 1 0 0
9 0 0 0 0 0 0 1 0 0 0
10 0 0 1 1 0 0 1 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=3
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 1 1 0 0 0 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=4
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 1 1 0 0 0 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=4
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 1 1 0 0 0 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=4
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=5
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=5
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 1 0
11 0 0 0 0 0 0 0 0 0 1
CONTADOR DE ISLAS (2.11)
0 1 2 3 4 5 6 7 8 9
0 0 0 0 0 0 0 0 0 0 0 cantIslas=5
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0
11 0 0 0 0 0 0 0 0 0 0