Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4 - Desa - Apli - Manejo - Archivos-Capitulo 4 - 01 Presentacion de Recursion
4 - Desa - Apli - Manejo - Archivos-Capitulo 4 - 01 Presentacion de Recursion
Administracin de Proyectos de desarrollo de Software Ciclo de vida de un proyecto IV. Desarrollo de aplicaciones con manejo de archivos deEnfoquede excepciones en JAVA texto y moderno
Fin de la presentacin
Administracin de Proyectos de desarrollo de Software Ciclo de vida de un proyecto IV. Desarrollo de aplicaciones con manejo de archivos deEnfoquede excepciones en JAVA texto y moderno
Mtodo Recursivo Se le llama recursivo a un mtodo que se llama el mismo para el desarrollo de algn clculo o el uso de alguna instruccin repetitiva. Es un concepto abstracto, ya que podramos pensar en utilizar un ciclo para desarrollar algo repetitivo, pero es importante que entiendas este concepto, ya que hay problemas que solo con recursin pueden ser resueltos, los ciclos no nos ayudan.
Componentes de recursin Una funcin recursiva finita se compone de: Caso base: una solucin simple para un caso particular del problema(puede haber ms de un caso base) Caso recursivo: una solucin que involucra volver a utilizar la funcin original.
Recursin Considera el caso de la funcin factorial de n definida como la multiplicacin de n por todos los nmeros que estn detrs de el hasta el 1.
1 n! =
n *(n-1)*(n-2)*... 1
si n = 0
si n > 0
Ejemplo:
4! = 4 * 3 * 2 * 1 = 24
Recursin
1 n! =
si n = 0 (caso base)
n *(n-1)!
4! = 4 * 3! Cuanto es 0! ?
3! = 3 * 2!
2! = 2 * 1!
1! = 1 * 0!
0! = 1
...clculo de 4! 4! es 24 3 ! es 6 2! es 2
4! = 4 * 3! =4*6
1! es 1
3! = 3 * 2! =3*2=6 0! es 1
2! = 2 * 1! =2*1=2
1! = 1 * 0! =1*1=1
qu hay dentro de la funcin public static int fact(int n){ if (n == 0) { return 1; } else { return n * fact(n - 1); } }
Caso Base El caso base en recursion se llama al ultimo valor por el cual se termina la recursin, en el caso del ejemplo se identifica por el if if (n == 0) { return 1; } El caso base aqu es cero, entonces cuando el mtodo se llama a el mismo con un cero, en ese momento se para la recursin y se regresa el valor 1, para entonces ls dems llamadas se puedan completar.
Caso Recursivo Se vuelve a llamar a la funcin pero con un valor que permita poder llegar al caso base (el cual en este caso es cero), entonces lo hacemos con n-1 else { return n * fact(n - 1); }
El return en realidad no se efectua, pues se tiene que volver a llamar el mtodo de nuevo pero con un valor menor, entonces se queda pendiente y se realiza el clculo, terminando con una llamada sucesiva del mismo mtodo y quedando valores pendientes hasta llegar al caso base.
1 1 1!= 1 * 0!
0 1 0!= 1
Notas Todo mtodo recursivo debe tener un caso base. Un mtodo recursivo debe volverse a llamar a el mismo pero con un valor diferente que permita hacer que se llegue a tocar el caso base.
Ejemplo completo
import java.io.*; public class AplicacionFactorial { private static BufferedReader ent = new BufferedReader( new InputStreamReader(System.in)); private static PrintWriter sal = new PrintWriter(System.out,true); private static PrintWriter salErr = new PrintWriter(System.err,true); private static int factorial (int n) { if (n == 0) { return 1; } else { return n * factorial (n-1); } }
Ejemplo completo (Cont.) public static void main(String[] args) throws IOException { int numero; salErr.println("Da el numero"); numero = Integer.parseInt(ent.readLine()); sal.println("Factorial de " + numero + " = " + factorial(numero)); } }
Ejemplo de la Ejecucin