Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen—En este artículo se aborda una metodología que Ejemplo 2
permite obtener algoritmos recursivos. Trama(Nodo1,Nodo2):-
[X|Y] unifica con [a b c] como X = a, Y = [b c] C. Simplificación de la Rutina.- Algo que nos ayude a
[X|Y] unifica con [a b c d] como X = a, Y = [b c d] encoger el tamaño del problema hacia el caso base.
[X|Y] unifica con [a] como X= a, Y = []
[X|Y] no unifica con [] D. Recursión Natural.- Expresa una llamada recursiva de la
función a la versión simplificada del problema
Las listas son bloques de trabajo fundamentales en la E. Completación.- Dada la solución es necesario preguntar
programación con Prolog. que es lo que se necesita hacer con la respuesta de la llamada
Por otra parte, la recursividad es también de fundamental recursive para formar la respuesta del problema original. Es
importancia en la programación lógica. necesario pensar en cual es la respuesta que da la llamada
recursiva y evitar preguntar como funciona.
El siguiente ejemplo aclara el procedimiento descrito.
II. RECURSIVIDAD
Ejemplo 5.- Sumar los dígitos de un número entero
En esta sección se va a demostrar que la recursividad puede
ser tratada con mucha más facilidad si se piensa en que hace el Solución.- Para simplificar el análisis del problema es
algoritmo y no en como lo hace. Para lograr este objetivo se va aconsejable utilizar un caso específico y no así el caso más
a hacer uso de la modularidad. general.
Para el ejemplo utilizamos el número 2368 = 2+3+6+8 = 20
A. Dividir y Conquistar
Un problema puede ser resuelto utilizando modularidad, la a. Caso base.- La solución es trivial, para los enteros de un solo
cual se consigue con la simple idea de divider y conquistar. dígito.
La estrategia de dividir y conquistar establece: - Test: n < 10
1. Dividir un problema grande en piezas pequeñas - Respuesta: n
2. Resolver las piezas pequeñas
3. Combinar las soluciones b. Simplificación de la rutina.- Renecesita dividir el problema
en subproblemas del mismo tipo, y existen varias maneras de
Por ejemplo, si consideramos el caso de comprar un auto, el hacer esto:
problema puede dividirse en otros dos: 2 368 = 2 + (3+6+8)
23 68 = (2+3) + (6+8)
a. buscar el auto que uno quiere
236 8 = (2+3+6) + 8
b. conseguir financiamiento
////Insertar gráfico
Cada una de las divisiones debería funcionar en teoría, es
así que la atención debería centrarse en cual de ellas es más
En este caso se ha dividido un problema grande en dos
fácil de implementar en la práctica. En nuestro caso
subproblemas, cada uno posiblemente de diferentes tipos.
utilizaremos la tercera opción.
La recursión es un caso especial de dividir y conquistar
//inserter grafico
donde los subproblemas individuales son del mismo tipo. De
manera figurativa, para resolver un cuadradono se debe dividir
c. Recursión Natural.- Este es un paso mecánico que no
en un pequeño círculo y un pequeño rectángulo sino en
requiere de mucha reflexión
pequeños cuadrados.
///Insertar grafico
sumarDigitos(236) = sumarDigitos(N/10)
Los siguientes pasos son muy útiles al momento de diseñar
donde ‘/ ‘denota la división entera.
un algoritmo recursivo.
d. Completación.- Asumiendo que conocemos la respuesta a
la recursión natural, necesitamos saber qué más debe ser hecho
B. Caso Base.- La más pequeña instancia del problema para determinar la respuesta final.
parala cual conocemos la respuesta sin mayor esfuerzo. Para En la recursión natural sumarDigitos(236) deberá dar 12
ello se necesitan dos elementos como respuesta. Dado este valor necesitamos adicionar el
- Un test para reconocer el caso base primer dígito (8) para obtener la respuesta final. La
- Una respuesta para el caso base completación es:
sumarDigitos(N/10) + n%10
Si elegimos la tercera opción obtenemos 6! = 5!*6 - Test: disco mayor no acomodado sobre eje
//insertar gráfico izquierdo o central
c. Recursión Natural.- - Respuesta: mover el disco al eje derecho
B. Calcular el N-ésimo término de la serie de Fibonacci d. Completación.- Se debe mover N-1 discos de la posición
inicial a una posición intermedia, el disco que resta se mueve a
Solución.- la posición final, luego se mueven los N-1 discos restantes a la
posición final
a. Caso Base.- El fibonacci de 0 es 1, y el fibonacci de 1 es 1.
- Test: N <= 1 mueve(N,I,C,D) = mueve(N-1,I,D,C),
- Respuesta: 1 mueve(1,I,C,D),mueve(N-1,C,I,D)
b. Simplificación.- Se sabe que el un término de la serie de
fibonacci es la suma de los dos términos de fibonacci e. Solución Prolog
anteriores
mueve(1,I,C,D);- imprime(´mueve de´ I ‘a’ D).
5
elemento(X, [H|T], [H|NT]):- elemento(X,T,NT). a. Caso Base.- La combinación de cero elementos de una lista da
como resultado la lista vacía.
d. Completación.- El código complete es
combinación(0,L,[]).
elemento(X,[X|T],T).
b. simplificación.- La combinación de N elementos de L es
elemento(X,[H|T],[H|NT]):- elemento(X,T,NT).
equivalente a extraer un elemento de L y combinar N-1 elementos
restantes
Nota.- El predicado elemento(X,L,R) resuelve como
verdadero si la lista L contiene al elemento X. Este predicado //incluir grafico
genera también una sublista R que contiene todos los
elementos de L menos X. Este predicado puede también ser c. Recursión Natural
usado para eliminar un elemento X de la lista L dando como
elimina(X,L,R), combinación(N-1,R,T).
respuesta R.
d. Completación.- Se debe concatenar el elemento eliminado con la
sublista combinada
E. Permutación de una lista
combinación(N,L,[X|T]):- elimina(X,L,R),
Solución.- La permutación de una lista es un conjunto de listas combinación(N-1, R,T).
que contienen todos los elementos de la misma en cierto e.Solución Prolog
orden.
Sea el predicado permutación(L,S) que genera en S una combinacion(0,L,[]).
permutación de L combinacion(N,L,[X|T]):-elimina(X,L,R),
combinación(N-1,R,T).
a. Caso Base.- La permutación de una lista vacía es una lista vacía
permutación([], []).
IV. CONCLUSIONES
b. Simplificación.- Se extrae un elemento de la lista y se permuta la
sublista resultante A conclusion section is not required. Although a conclusion
may review the main points of the paper, do not replicate the
//incluir grafico abstract as the conclusion. A conclusion might elaborate on the
importance of the work or suggest applications and extensions.
c. Recursión Natural.-