La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Presentaciones similares


Presentación del tema: ""— Transcripción de la presentación:

101 MC Beatriz Beltrán Martínez Primavera 2014
Recursión MC Beatriz Beltrán Martínez Primavera 2014

102 Introducción Una función recursiva es aquella que se llama a sí misma.
La recursividad es una alternativa a la repetición o iteración. En tiempo de computadora y ocupación de memoria, la solución recursiva es menos eficiente que la iterativa, existen situaciones en las que la recursividad es una solución simple y natural a un problema que en otro caso será difícil de resolver FCC - BUAP Primavera 2014 BBM

103 Definición de un método recursivo
La característica principal de la recursividad es que siempre existe un medio de salir de la definición (caso base o salida), y la segunda condición (llamado recursivo) es propiamente donde se llama a sí misma. Una función recursiva simple en Java es:   public void infinito () { infinito (); } FCC - BUAP Primavera 2014 BBM

104 Definición De manera más formal, una función recursiva es invocada para solucionar un problema y dicha función sabe cómo resolver los casos más sencillo (casos bases). Donde si la función es llamada desde un caso base, ésta simplemente devuelve el resultado. Si es llamada mediante un problema más complejo, la función lo divide en dos partes conceptuales: una parte de dicha función sabe resolver y otra que no sabe resolver. FCC - BUAP Primavera 2014 BBM

105 Definición Además esta segunda parte debe parecerse al problema en sí; para tener la recursividad; pero debe ser más simple. Debido a que se parece a la original la función lanza una copia de ella misma, que se encargará del problema más sencillo (llamado recursivo o paso de recursión). En esta parte se tendrá la devolución de un valor que era desconocido inicialmente. FCC - BUAP Primavera 2014 BBM

106 Ejemplo con recursividad
El factorial de un entero no negativo n, esta definido como: n! = n * (n-1) * (n-2) * … *2 *1 Donde 1! es igual a 1 y 0! se define como 1. El factorial de un entero k puede calcularse de manera iterativa como sigue: fact = 1; for (int i = k; i>=1; i--) fact *= i; FCC - BUAP Primavera 2014 BBM

107 Ejemplo con recursividad
Ahora de manera recursiva se puede definir el factorial como: Donde el caso base es: 1 Si n = 0, n=1. El caso general es: n * (n-1)! Si n > 1. Por ejemplo si se quiere calcular el factorial de 5, se tendría: 5! = 5*4*3*2*1 5! = 5*(4*3*2*1) 5! = 5*4! FCC - BUAP Primavera 2014 BBM

108 Ejemplo con recursividad
Valor devuelto 120 5! FCC - BUAP Primavera 2014 5! Se devuelve 5!=5*24=120 5* 4! 5* 4! Se devuelve 4!=4*6=24 4* 3! 4* 3! Se devuelve 3!=3*2=6 3* 2! BBM 3* 2! Se devuelve 2!=2*1=2 2* 1! 2* 1! Se devuelve 1 1 1

109 Ejemplo con recursividad
Caso base: Es el caso más simple de una función recursiva, y simplemente devuelve un resultado (el caso base se puede considerar como una salida no recursiva). Caso general: Relaciona el resultado del algoritmo con resultados de casos más simples. Dado que cada caso de problema aparenta o se ve similar al problema original, la función llama una copia nueva de si misma, para que empiece a trabajar sobre el problema más pequeño y esto se conoce como una llamada recursiva y también se llama el paso de recursión. FCC - BUAP Primavera 2014 BBM

110 Método Obtener una definición exacta del problema a resolver. (Esto, por supuesto, es el primer paso en la resolución de cualquier problema de programación). A continuación, determinar el tamaño del problema completo que hay que resolver. Este tamaño determinará los valores de los parámetros en la llamada inicial a la función. Resolver el caso base en el que el problema puede expresarse no recursivamente. Por último, resolver el caso general correctamente en términos de un caso más pequeño del mismo problema, una llamada recursiva. FCC - BUAP Primavera 2014 BBM

111 Tipos de recursión Recursividad simple: Aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos. Factorial Recursividad múltiple: Se da cuando hay más de una llamada a sí misma dentro del cuerpo de la función, resultando más difícil de hacer de forma iterativa. Fibonacci FCC - BUAP Primavera 2014 BBM

112 Tipos de recursión Recursividad anidada: En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma. Ackerman Recursividad cruzada o indirecta: Son algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones. Es decir es aquella en la que una función es llamada a otra función y esta a su vez llama a la función que la llamó. FCC - BUAP Primavera 2014 BBM

113 Tipos de recursión Ejemplo: Par o Impar int par(int nump) { if (nump==0) return(1); return( impar(nump-1)); } int impar (int numi) { if(numi==0) return(0); return( par(numi-1)); } FCC - BUAP Primavera 2014 BBM

114 Recursión vs. Iteración
Las principales cuestiones son la claridad y la eficiencia de la solución. En general: Una solución no recursiva es más eficiente en términos de tiempo y espacio de computadora. La solución recursiva puede requerir gastos considerables, y deben guardarse copias de variables locales y temporales. Aunque el gasto de una llamada a una función recursiva no es peor, esta llamada original puede ocultar muchas capas de llamadas recursivas internas. El sistema puede no tener suficiente espacio para ejecutar una solución recursiva de algunos problemas. FCC - BUAP Primavera 2014 BBM

115 Recursión vs. Iteración
Una solución recursiva particular puede tener una ineficiencia inherente. Tal ineficiencia no es debida a la elección de la implementación del algoritmo; más bien, es un defecto del algoritmo en si mismo. Un problema inherente es que algunos valores son calculados una y otra vez causando que la capacidad de la computadora se exceda antes de obtener una respuesta. La cuestión de la claridad en la solución es, no obstante, un factor importante. En algunos casos una solución recursiva es más simple y más natural de escribir. FCC - BUAP Primavera 2014 BBM


Descargar ppt ""

Presentaciones similares


Anuncios Google