martes, 27 de noviembre de 2012


RECURSIVIDAD

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados. Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y elegantemente simples. La recursividad es un concepto fundamental en matemáticas y en computación. Una definición recursiva dice cómo obtener conceptos nuevos empleando el mismo concepto que intenta describir.

En toda situación en la cual la respuesta pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas, la fórmula recursiva es un buen candidato para resolver el problema. Los razonamientos recursivos se encuentran en la base misma de las matemáticas porque son necesarios para describir conceptos centrales como el de número:

Ejemplo:

1. Factorial

Definición:

            factorial (n) = n!                               si n > 0

            factorial (n) = n*n-1*n-2* ... * 1      si n > 0

            el valor de 0! se define como

            factorial (0) = 1

Su definición recursiva es:

            factorial (n) = 1                                 si n = 0

            factorial (n) = n* factorial (n-1)       si n > 0

así para calcular el factorial de 4:

            factorial (4) = 4 * factorial (3) = 4 * 6 = 24

            factorial (3) = 3 * factorial (2) = 3 *2 = 6

            factorial (2) = 2 * factorial (1) = 2 * 1 = 2

            factorial (1) = 1 * factorial (0) = 1 * 1 = 1

estática int factorial (int n)

comienza

            si n = 0 entonces

                        regresa 1

            otro

                        regresa factorial (n-1) * n

termina

Las definiciones recursivas de funciones en matemáticas que tienen como argumentos números enteros, se llaman relaciones de recurrencia. Forma de una ecuación de recurrencia:

coar +c1ar-1 + c2ar-2 + ....+ ckar-k = f(r)   función matemática discreta

donde ci son constantes, es llamada una ecuación de recurrencia de coeficientes constantes de orden k, condicionada a que c0 y ck = 0.

Una definición recursiva dice cómo obtener conceptos nuevos empleando el mismo concepto que intenta definir.

El poder de la recursividad es que los procedimientos o conceptos complejos pueden expresarse de una forma simple.

Un razonamiento recursivo tiene dos partes: la base y la regla recursiva de construcción. La base no es recursiva y es el punto tanto de partida como de terminación de la definición.
Ejemplo:

            Base: La secuenciación, iteración condicional y selección son estructuras válidas de control que pueden ser consideradas como enunciados.

            Regla recursiva: Las estructuras de control que se pueden formar combinando de manera válida la secuenciación iteración condicional y selección también son válidos.

Un conjunto de objetos está definido recursivamente siempre que:

            (B) algunos elementos del conjunto se especifican explícitamente

            (R) el resto de los elementos del conjunto se definen en términos de los elementos ya definidos donde

            (B) se llama base

            (R) se llama cláusula recursiva

Observaciones:

1. El procedimiento se llama a si mismo

2. El problema se resuelve, resolviendo el mismo problema pero de tamaño menor

3. La manera en la cual el tamaño del problema disminuye asegura que el caso base eventualmente se alcanzará

La recursividad es un método poderoso usado en inteligencia artificial, su poder es que algunos conceptos complejos pueden expresarse en una forma simple. Una definición recursiva difiere de una definición circular en que tiene una forma de escapar de su expansión infinita. Este escape se encuentra en la definición o porción no recursiva o terminal de la definición.

Las fórmulas recursivas pueden aplicarse a situaciones tales como prueba de teoremas, solución de problemas combinatorios, algunos acertijos, etc.

4. Definición recursiva para elevar un número a una potencia: Un número elevado a la potencia cero produce la unidad; la potencia de un número se obtiene multiplicándolo por sí mismo elevando a la potencia menos uno. Por ejemplo:

            32 = 3*(31) = 3*(3*30) = 3*(3*1)= 3*(3) = 9

estática int potencia (int n, int k)

comienza

            si k=0 entonces

                        regresa 1

            otro
                        regresa n * potencia (n,k-1
termina
5. Número de Combinaciones

Recursivamente, podemos definir el número de combinaciones de m objetos tomados de n, denotado (n,m) para n> 1 y 0 < m < n por:

(n,m) = 1                                                       si m = 0 ó m = n ó n = 1

(n,m) = (n-1, m) + (n-1,m-1)                       en otro caso
estática int  combinaciones (int n, int m)
comienza
            si m = 0 o m = n o n = 1 entonces
                        regresa 1
            otro
                        regresa combinaciones (n-1,m) + combinaciones (n-1,m-1)

termina

Definición: Cuando una llamada recursiva es la última posición ejecutada del procedimiento se llama recursividad de cola, recursividad de extremo final o recursión de extremo de cola.
Definición: Cuando un procedimiento incluye una llamada a si mismo se conoce como recursión directa.
Definición: Cuando un procedimiento llama a otro procedimiento y este causa que el procedimiento original sea invocado, se conoce como recursión indirecta.
Al principio algunas personas se sienten un poco incómodas con la recursividad, tal vez porque da la impresión de ser un ciclo infinito, pero en realidad es menos peligrosa una recursión infinita que un ciclo infinito, ya que una recursividad infinita pronto se queda sin espacio y termina el programa, mientras que la iteración infinita puede continuar mientras no se termine en forma manual.
Cuando un procedimiento recursivo se llama recursivamente a si mismo varias veces, para cada llamada se crean copias independientes de las variables declaradas en el procedimiento.
ALGORITMOS RECURSIVOS
 
Un algoritmo recursivo es un algoritmo que expresa la solución de un problema en términos de una llamada a sí mismo. La llamada a sí mismo se conoce como llamada recursiva o recurrente.
Recursividad indirecta
Cuando en una subrutina hay llamadas a ella misma se habla de recursividad directa, en contraposición, cuando se tienen varias subrutinas y estas se llaman unas a otras formando ciclos se dice que la recursión es indirecta.
Ejemplo:
1.-Da un algoritmo recursivo para hallar an, donde a es el número real distinto de cero y n un entero no negativo.
Solución:Podemos construir un algoritmo recursivo basándonos en la definición recursiva de an. 
Esta definición afirma que an+1 = a.an para n > 0 con la condición inicial a0 =
1. Para calcular an podemos usar sucesivamente la regla recursiva para reducir el exponente hasta que se haga cero
Algoritmo 1 un algoritmo recursivo para hallar an
Procedure potencia (a número real no nulo, n: entero no negativo)
If n = 0 the potencia (a,n):=1
Else potencia (a,n):=a.potencia (a,n-1)
2.-Da un algoritmo recursivo para calcular el máximo común divisor de dos enteros no negativos a y b, a > b.
Solución: nos podemos basar en la reducción mcd(a, b) = mcd (b mod a, a) y la condición mcd (0,b) = b cuando b > 0.
Algoritmo 2 un algoritmo recursivo para hallar el mcd (a, b)
Procedure mcd(a, b: entero no negativo, a<b)
If a = 0 the mcd (a,b):=b
Else mcd (a, b):=mcd (b mod a,a)
 
3.- Expresa el algoritmo de búsqueda lineal como procedimiento recursivo
Solución: para buscar x en la sucesión a1, a2 …an en el paso decimo comparamos x y ai. Si x = a entonces i es la posición de x. es el caso contrario la búsqueda de x se reduce a buscar en la sucesión con un elemento menos es decir la sucesión ai + 1, …..an.
  Algoritmo 3 un algoritmo recursivo de búsqueda lineal
Procedure búsqueda (i, j, x)
If ai = x the
Posicion :=i
Else if i = j the
Posicion :=0
Else busqueda (i+ 1, j, x
4.- El procedimiento recursivo del algoritmo 4 de el valor de n! cuando la entrada en un entero positivo n
Algoritmo 4 un algoritmo recursivo para la función factorial
Procedure factorial (n: entero positivo)
If n= 1 the

Factorial (n) :=1
Else factorial (n) :n. factorial (n-1)
5.-
Algoritmo 5 un algoritmo recursivo para los números de fibonacci
Procedure fibonacci (n entero no negativo)
If n= 0 the Fibonacci (0) = 0
Else if n = 1 the Fibonacci(1) = 1
Else Fibonacci (n) = Fibonacci (n-1)+ Fibonacci (n-2)
 
Un algoritmo se llama recursivo si resuelve un problema reduciéndolo a un caso del mismo problema con cada dato de entrada más pequeño
Funciones
Los números de fabanacci, f0, f1, f2…. De definen a partir de las ecuaciones f0 = 0, f1 = 1 y fn = fn-1 + f n-2
Para n = 2, 3, 4, ….

No hay comentarios:

Publicar un comentario