B)
PROGRAMACIÓN FUNCIONAL CON RECURSIVIDAD
Las funciones recursivas se
invocan a sí mismas, permitiendo que una operación se realice una y otra vez
hasta alcanzar el caso base. Aunque algunas recursividades requieren el
mantenimiento de una pila, la recursividad mediante una cola puede ser
reconocida y optimizada mediante un compilador dentro del mismo código
utilizado, para implementar las iteraciones en un lenguaje imperativo. El
estándar del esquema del lenguaje requiere implementaciones para conocer y
optimizar la recursividad mediante una cola. La optimización de la recursividad
mediante una cola puede ser implementada transformando el programa a un estilo
de pase de continuidad durante la compilación, entre otros enfoques.
La mayoría de los lenguajes de
programación funcional de propósito general permiten la recursividad sin
restricciones y superan el test de Turing, lo que hace que el programa que se
interrumpe no pueda tomar un decisión, lo que puede causar una falta de solidez
en el razonamiento ecuacional y generalmente requiere introducir inconsistencia
dentro de la lógica expresada por los tipos del sistema del lenguaje. Algunos
lenguajes de propósito especial como Coq permiten tan sólo recursividad bien
fundamentada y tienen una normalización fuerte(cálculos no finalizados pueden
ser expresados tan sólo con flujos de valores infinitos llamados codata) En
consecuencia, estos lenguajes fallan el test de Turing y declarar funciones
ciertas en ellos es imposible, pero pueden declarar una amplia clase de
cálculos interesantes mientras evitan los problemas producidos por la
recursividad sin restricciones. La programación funcional limitada a la
recursividad bien construida con unas cuantas restricciones más se llama
programación funcional total.
TÉCNICAS DE
PROGRAMACIÓN RECURSIVIDAD
La función matemática factorial
se define como el producto de todos los números hasta el argumento inclusive.
Dado que restamos uno de N cada
vez y comprobamos si es igual a uno, la función no es infinita y puede
completarse correctamente.
sage: def factorial_rec(n):
Escribir la función del
factorial sin utilizar la recursividad implica el desarrollo de mucho más
código. Necesitamos crear una lista de todos los números desde el 1 al N y
luego iterar en la lista multiplicando el total actual por el item siguiente.
Puedes probar hacerlo como un ejercicio y comparálo con la función definida más
arriba.
MODELOS DE EVALUACIÓN
Evaluación es el proceso sistemático
de recolección y análisis de datos con la finalidad de determinar si es que, y
hasta que punto, unos objetivos han sido o están siendo logrados. La
información resultante se pone al servicio de la toma de decisiones.
CLASES DE
TIPOS
Listas
Una lista es una colección
ordenada de valores. Una lista puede contener cualquier cosa.
En Python, el tipo de datos que
representa a las listas se llama list.
Las dos maneras principales de
crear una lista son:
- usar una lista literal, con los valores entre corchetes:
- usar la función list aplicada sobre un iterable:
Pilas
Es un lenguaje que usa un modelo
de máquina de pila para pasar los parámetros. Varios lenguajes de programación
entran en esta descripción, notablemente forth ,RPL y PostScript, y también
muchos lenguajes ensamblador (pero a un nivel muy inferior).
Los lenguajes de programación
orientados a pila operan sobre uno o más pilas que pueden responder a
diferentes propósitos. Debido a esto, las construcciones en otros lenguajes de
programación pueden necesitar ser
modificadas para el uso en un lenguaje de programación orientado a pila. Sumado
a esto, algunos lenguajes de programación orientados a pilas operan en notación
polaca inversa (RPN) o notación de postfijo - es decir, los argumentos o
parámetros para un cierto comando se indican antes del comando real en sí
mismo. Por ejemplo, para multiplicar 2 por 3, en notación polaca inversa uno
diría "2, 3, multiplica" en vez de "multiplica, 2, 3"
(notación de prefijo o notación polaca) ó "2 multiplica 3" (notación
de infijo).
Árboles
Es una estructura de
datos no lineal puesto que cada elemento apunta a uno o varios
elementos del mismo tipo; esto es dado un elemento, no hay un único camino a
seguir. El elemento que apunta a otro es llamado padre, mientras que el
elemento apuntado se conoce como hijo. Todos los elementos tienen un padre
a excepción de la raíz. Puede decirse que un árbol esta formado
por subarboles resaltando así su naturaleza recursiva.
Cola
Funciones de recursión de cola
son funciones que finalizan con una llamada recursiva que no crea ninguna
operación deferida. Con un compilador que
automáticamente optimiza llamadas recursivas de cola, una función recursiva de
cola, como por ejemplo gcd, se ejecutará usando un espacio constante. Así, el
proceso que genera es esencialmente iterativo y equivalente a usar estructuras
de control de lenguaje imperativo como los bucles for y while.
La importancia de recursión de cola es que cuando se realiza una llamada
recursiva de cola, la posición de retorno de la función que llama necesita
grabarse en el call stack; cuando la función recursiva
retorna, continuará directamente a partir de la posición de retorno grabada
previamente. Por ello, en compiladores que dan soporte a optimización de
recursión de cola, este tipo de recursión ahorra espacio y tiempo.
APLICACIONES
DE RUTINAS DE PSEUDOCODIGO
Los objetos en C++ son abstraídos
mediante una clase. Según el paradigma de la programación orientada a objetos
un objeto consta de:
Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que pertenece dicho objeto).
Métodos o funciones miembro
Atributos o variables miembro
Identidad, que lo diferencia de otros objetos (Nombre que llevara la clase a la que pertenece dicho objeto).
Métodos o funciones miembro
Atributos o variables miembro
No hay comentarios:
Publicar un comentario