Programación funcional.
Definición, Características,
Lenguajes.
-Lisp-Camel
-Hope
-Erlang
a) Técnicas de programación recursiva:
Es una técnica utilizada
en programación que nos permite que un bloque de instrucciones se ejecute un
cierto número de veces (el que nosotros determinemos). A veces es algo
complicado de entender, pero no os preocupéis. Cuando veamos los ejemplos
estará clarísimo. En Java, como en otros muchos lenguajes, los métodos pueden
llamarse a sí mismos. Gracias a esto, podemos utilizar a nuestro favor la
recursividad en lugar de la iteración para resolver determinados tipos de
problemas.
Ejemplo
sencillo
Vamos a
ver un pequeño ejemplo que no hace absolutamente nada. Es un método cuyo único
objetivo es llamarse a sí mismo:
void cuentaRegresiva () {
cuentaRegresiva();
}
Si
ejecutas esto, les va a dar un error en la pila (mítico StackOverflow Error, Biblia de los
programadores).
Como véz,
he llamado al método “cuentaRegresiva” porque
vamos a mostrar por pantalla la cuenta atrás de un número que nosotros pasemos
como parámetro a la función. Por ejemplo, para hacer la cuenta atrás de 10 sin
recursividad, haríamos:
for( int i = 10; i >= 0; i--) {
System.out.println(i);
}
Ahora,
para hacerlo de manera recursiva, tendríamos que pasar como parámetro un
número. Además, tras imprimir ese número, llamaremos a la misma función con el
número actual restando uno:
void cuentaRegresiva(int numero) {
System.out.println(numero);
cuentaRegresiva(numero - 1);
}
Es lo que
les he comentado arriba. Llamamos a la función con un 10. Imprimimos el 10 y
llamamos a la función con un 9. Imprimimos el 9 y llamamos a la función con un
8. Así hasta el fin de los días. Digo hasta el fin de los días porque les va a
saltar error si ejecutas esto así directamente:
public class Recursividad {
static
void cuentaRegresiva(int numero) {
System.out.println(numero);
cuentaRegresiva(numero - 1);
}
public
static void main(String[] args) {
cuentaRegresiva(10);
}
}
Problema:
llamada infinita. Para ello, lo que tenemos que hacer es que cuando el número
sea 0, deje de llamar a la función. Para eso, metemos una estructura condicional de toda la vida. Gracias al
condicional, dejará de ejecutarse a partir de 0:
void cuentaRegresiva(int numero) {
System.out.println(numero);
if(numero > 0) {
cuentaRegresiva(numero - 1);
}
}
Factorial
Calcular
el factorial de un número con recursividad es el típico ejemplo para explicar
este método de programación. Recordad que el factorial de un número es
multiplicar dicho número por todos sus anteriores hasta llegar a 1. Se
representa con una exclamación. Por ejemplo:
5! = 54321 = 120 El
recorrer los números hacia atrás ya lo tenemos hecho. Ahora lo que queda es
multiplicar ese número por su anterior, y así sucesivamente:
int factorial(int n) {
if (n
== 0) {
return 1;
} else
{
return n * factorial(n - 1);
}
}
Si ya quieres simplificarlo al máximo.
int factorial(int n) {
return
(n == 0) ? 1 : n * factorial(n - 1);
}
B) Modelos de evaluación:
Evaluación es el procesos sistemático de recolección y análisis de datos con la finalidad de determinar si es que, y hasta que el punto, unos objetivos han sido o están siendo logrados.
Tipos:
Haskell posee una característica que lo distingue de otros lenguajes de programación.
El tipo de polimorfismo del que hemos tratado hasta ahora es denominado polimorfismo llamado ad hoc o sobrecarga. }
Haskell posee una característica que lo distingue de otros lenguajes de programación.
El tipo de polimorfismo del que hemos tratado hasta ahora es denominado polimorfismo llamado ad hoc o sobrecarga. }
Aplicaciones en rutinas de pseucodigo :
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
Un ejemplo de clase que podemos tomar es la clase perro. Cada perro comparte unas características (atributos). Su número de patas, el color de su pelaje o su tamaño son algunos de sus atributos. Las funciones que lo hagan ladrar, cambiar su comportamiento... esas son las funciones de la clase.
Este es otro ejemplo de una clase:
class Punto
{
//por omisión los miembros son 'private' para que
sólo se puedan modificar desde la propia clase.
private:
// Variable miembro privada
int id;
protected:
// Variables miembro protegidas
int x;
int y;
public:
// Constructor
Punto();
// Destructor
~Punto();
// Funciones miembro o métodos
int ObtenerX();
int ObtenerY();
};
No hay comentarios:
Publicar un comentario