Documentos de Académico
Documentos de Profesional
Documentos de Cultura
I. RECURSIVIDAD
6! = 1*2*3*4*5*6
c. Recursión Natural.- Este es un paso mecánico que no Algunas posibles subdivisiones del problema son:
requiere de mucha reflexión
1 23456 = 1*(2*3*4*5*6)
sumarDigitos(236) = sumarDigitos(N/10) 12 3456 = (1*2*3)*(4*5*6)
123 456 = (1*2*3*4*5)*6
donde ‘/ ‘denota la división entera.
d. Completación.- Asumiendo que conocemos la respuesta a Si elegimos la tercera opción obtenemos 6! = 5!*6
la recursión natural, necesitamos saber qué más debe ser //
hecho para determinar la respuesta final.
En la recursión natural sumarDigitos(236) deberá dar 12
como respuesta. Dado este valor necesitamos adicionar el
1*2*3*4*5*6
primer dígito (8) para obtener la respuesta final. La
completación es:
sumarDigitos(N/10) + n%10
1*2*3*4*5 6
donde ‘%’ es el operador módulo.
e. Solución Prolog.- Poniendo todo junto y utilizando
Prolog como lenguaje de programación, obtenemos la c. Recursión Natural.-
siguiente solución:
sumarDigitos((N,N):- N < 10; factorial(5) = factorial(N-1)
sumarDigitos(N,S):- N <= 10, N1 is N/10,
N2 is mod(N,10), d. Completación.- Conociendo la respuesta de la recursión
sumarDigitos(N1, X), natural el resultado debe multiplicarse por N. La completación
S is X + N2; es:
factorial(N-1)*N
La primera línea devuelve el mismo número si este es e. Solución Prolog.-
menor a 10. factorial(0,1);
En la segunda línea N1 es igual a los dígitos de N factorial(N,F):- factorial(N-1,R),
excluyendo el primero, y N2 es igual al primer dígito. X es el F is N*R;
resultado de aplicar la función a los dígitos de N1 y finalmente B. Calcular el N-ésimo término de la serie de Fibonacci
el resultado S es igual al obtenido en X más N2.
Aquí se puede ver como funciona el algoritmo, se supone
Solución.-
que la función sumarDigitos devuelve la suma de los dígitos
del número que es introducido, y como sabemos que esto a. Caso Base.- El fibonacci de 0 es 1, y el fibonacci de 1 es 1.
funciona confiamos en que la función nos devolverá el
- Test: N = 0 ó N = 1
resultado correcto cuando introducimos N1. Es decir que
- Respuesta: 1
sabemos que es lo que hace la función pero ignoramos como
b. Simplificación.- Se sabe que un término de la serie de
lo hace.
fibonacci es la suma de los dos términos de fibonacci
3
Fib(5) Fib(4)
c. Recursión Natural
fibonacci(5) = fibonacci(N-1)
fibonacci(4) = fibonacci(N-2) c. Recursividad Natural.- Sea la función mueve(N, I, C, D)
d.Completación.- que mueve N discos de I a D. La recursividad natural conduce
a mover N-1 discos de I a C, de donde se tiene
fibonacci(N) = fibonacci(N-1) + fibonacci(N-2)
mueve(N-1, I, D, C)
e.- Solución Prolog
d. Completación.- Se debe mover N-1 discos de la posición
fib(0,1); inicial a una posición intermedia, el disco que resta se mueve a
fib(1,1). la posición final, luego se mueven los N-1 discos restantes a la
fib(N,F):- fib(N-1,R1), fib(N-2,R2), posición final
F is R1 + R2.
mueve(N, I, C, D) = mueve(N-1, I, D, C),
C. Torres de Hanoi.
mueve(1, I, C, D), mueve(N-1, C, I, D)
Se tienen tres ejes y N discos de diferentes radios. Solo se
permite que los discos de radio menor vayan sobre los de radio
e. Solución Prolog
mayor.
Inicialmente se apilan todos los discos sobre el eje izquierdo
mueve(1, I, C, D);- imprime(‘mueve de’ I ‘a’ D).
y la finalidad es trasportarlos al eje derecho.
mueve(N, I, C, D):- mueve(N-1, I, D, C),
mueve(1, I, C, D),
mueve(N-1, C, I, D).
e. Solución Prolog
permutación([], []).
permutación(L, [H|P]):-elimina(H, L, T),
permutación(T, P).
elimina(X, [X|T], T).
elimina(X, [H|T], [H|NT]):-elimina(X, T, NT).
F. Combinaciones
Es un subconjunto arbitrario de un conjunto conteniendo un
número dado de elementos donde el orden no es importante.
combinación(0, L, []).