UNIDAD II RECURSIVIDAD

INGRIA. EN SISTEMAS COMPUTACIONALES

DOCENTE: LIC. MARÍA TERESA COBOS PONCE

ALUMNOS:

10500309 HERNÁNDEZ GIL NANCY YESENIA 10500295 BENÍTES MARTÍNEZ IGNACIO

CERRO AZUL, VER.

30 DE SEPTIEMBRE 2011

las condiciones generales para resolver los algoritmos recursivos. Página 1 . es sencillo. con el propósito de darle un mayor entendimiento al concepto de recursividad y sus aplicaciones en la programación. así como su procedimiento recursivo. ya que es muy importante pues nos permite ahorrar líneas de código y hacer más entendible un problema. Dentro de la recursividad. Por ello en el presente ensayo vamos a establecer que es la recursividad. Es aquí donde entra la PROGRAMACIÓN RECURSIVA. solo se trata de dividir en pequeños módulos el problema para así entender cada procedimiento y dar con la solución de dicho problema. A continuación definiremos que es la recursividad. Como sabemos. pues ésta se basa en métodos recursivos. la recursión facilita la programación de algoritmos cortos y eficientes. Este procedimiento es el llamado DIVIDE Y VENCERAS.UNIDAD II RECURSIVIDAD En muchas ocasiones. ya sea por su dificultad de entender sus términos. es por ello que la ABSTRACCIÓN DE DATOS va de la mano con los métodos recursivos puesto que existe un método que la mayoría de los programadores utilizan para resolver un problema muy grande de forma entretenida y fácil de comprender al término de su solución. no podemos describir algunos algoritmos. directa o indirectamente. y se mencionan ejemplos prácticos de resolución de problemas. para resolver un problema debemos buscar la manera de resolverlo sin dificultades. los tipos de la misma.

después sumar y así dar con el resultado. mediante ciclos repetitivos que permiten al programador la utilización de menos código así como la comprensión clara del programa. primero tenemos que multiplicar. Es decir. Dentro de la programación nos facilita la realización de largos programas en los cuales se utiliza varias líneas de código.UNIDAD II RECURSIVIDAD Dando un concepto más factible para su mayor entendimiento decimos que la recursividad es una herramienta que nos permite la resolución de problemas dándole a las funciones y módulos capacidades para poder llamarse así mismo. TIPOS DE RECURSIVIDAD 1. que el caso base tenga una instancia más pequeña de sí mismo para la resolución del problema. con diferentes instancias. Página 2 . Existe en todos lados. dentro de un mismo procedimiento. en la multiplicación de números naturales. en un problema. en cualquier situación. más simples. como por ejemplo. A continuación se mencionan los tipos de recursividad que hasta ahora hemos desarrollado en clase. que deba existir un caso base entre todos los casos incorporados al programa que se ejecute sin que se le tenga que indicar una nueva llamada recursiva. puesto que utilizamos varios procedimientos. Entonces un método recursivo se llama así mismo de forma directa o indirecta. RECURSIVIDAD BÁSICA: Es el tipo de recursividad que nos señala.

a continuación describiremos el procedimiento recursivo y las consideraciones que debemos de tomar en cuenta al estar dentro del proceso de recursividad. El procedimiento cuenta con tres pasos que se describen enseguida: CASO BASE: una solución determinante que el usuario o programador da para un caso.UNIDAD II RECURSIVIDAD 2. Como cualquier problema necesita un procedimiento. Página 3 . directamente. se pueden combinar para que el resultado de dicha combinación sea válida en el problema. esta recursividad muestra sus diferentes procedimientos llamándose unos a los otros. 3. Las consideraciones que se deben de tomar para que notemos que el problema va funcionando correctamente son las siguientes: Condición de limitación: Aquí indicamos una sentencia para detener la recursividad. REGLA RECURSIVA: establece que las estructuras de control. esto para evitar que se convierta en un ciclo que sea difícil de detener. RECURSIVIDAD DIRECTA: Se presenta cuando el procedimiento que estamos llevando a cabo para la resolución del problema se llama así mismo una o muchas veces. como lo son la selección. Eficacia: Entendemos que es mucho más eficaz si evitamos muchas llamadas recursivas entre los procesos del problema. Puede haber más de un caso base. iteración y secuenciación. Uso de la memoria: aplicación que vamos a realizar debe tener un espacio limitado en la memoria. es decir que necesita ese espacio para la copias de sus variables locales. CASO RECURSIVO: Aquí es indispensable saber que se necesita volver a llamar a la función original (función base) para mostrar parámetros que no estén distantes al caso base. RECURSIVIDAD INDIRECTA: Por lo contrario a la directa. como su nombre lo indica.

se muestran algunos: 1.UNIDAD II RECURSIVIDAD Llamadas por paréntesis: Establecer el nombre del procedimiento entre paréntesis.1) Caso base 1! = 1 Ya tenemos lo necesario para una implementación recursiva: 1 2 3 4 5 6 7 8 // Evalue n! public static long factorial ( int n ) { if ( n <= 1 ) // caso base return 1. En este ejemplo se muestra el uso de la recursividad en un factorial: N! es el producto de los N primeros enteros. La mejor forma de entender la recursividad es mediante ejemplos significativos. Pruebas: Para saber si nuestro programa está bien. else return n * factorial ( n – 1 ) } 1. En el siguiente programa se muestra la utilización de recursividad de un factorial: Página 4 . N! = (N . esto cuando el procedimiento función se llama así mismo por un método recursivo. tenemos que comprobarlo ¿no? Entonces se hacen pruebas para estar seguros de que el proceso recursivo o el método se detenga en el momento que el programador lo haya establecido.

System. // Inserter datos por teclado.println(" 2.out.out. Factorial de un elemento: "). Salir: "). break.parseInt(entrada.io. System. default:Menu(). public static void main(String[ ] args)throws IOException{ Menu(). case 2: System. } public static void Opciones (int o)throws IOException{ switch( o ){ // Declaracion de un menu case 1: Factorial().readLine()).out. System.out. break. public class recur_sividad{ public static BufferedReader entrada=new BufferedReader(new InputStreamReader(System. } } Página 5 .exit(1). } public static void Menu()throws IOException{ System.println(" 1.println(" ====== Utilizacion de recursividad =========="). int opc = Integer.println(" ").out. Opciones( opc ). break.in)).UNIDAD II RECURSIVIDAD import java. System.*.println(" ").

System.out. } else{ return a*factorial(a-1). // Recursividad } } } El resultado al compilar este programa es: ====== Utilizacion de recursividad ========== 1. int b = factorial(a). Salir: 1 Inserte el número: 2 El factorial de 2 es 2 ====== Utilizacion de recursividad ========== Página 6 .println("El factorial de " + a + " es " + b). return 1.println(" ").parseInt(entrada. } public static int factorial(int a)throws IOException{ if ( (a==0) || (a==1) ){ // Ciclo for. System.readLine()). Factorial de un elemento: 2.out. int a = Integer.print(" Inserte el numero: "). Menu(). System.UNIDAD II RECURSIVIDAD public static void Factorial()throws IOException{ // La función factorial es declara.out.

Página 7 . Salir: 2 Proceso completo. Factorial de un elemento: 2.UNIDAD II RECURSIVIDAD 1.

*no se utiliza cuando los arreglo son muy largos. pues se complica mucho la recursión y puede generar un circulo infinito. Una de sus ventajas es el ahorro de código implementado en un programa. nos ayuda a resolver problemas complejos utilizando sus consideraciones en base a sus pasos. y es necesario comprenderla por que como estudiantes de ingeniería en sistemas computacionales seguiremos tratando con la recursividad por que más que métodos recursivos es un proceso que como anteriormente explicamos. detectar dónde está su dificultad para no confundirnos. Una de sus desventajas es que mucha utilización de recursión provoca la ineficiencia del programa. pues nos permite ahorrar código. es decir. *Se utiliza para simplificar el código para mayor entendimiento. le facilita el trabajo a un programador Página 8 . que el programa no funcionara.UNIDAD II RECURSIVIDAD La recursión nos facilita la resolución de cualquier programa. Es importante entender la recursividad puesto que se presenta en situaciones cotidianas. En pocas palabras.

UNIDAD II RECURSIVIDAD Página 9 .

..9.3 $973(.89.4/2.78 9748 .3807907/.05943   YZS  ./4  5:-.94854790.

05943 $8902 4:9 57393 &9.4308 394 9748 .9.9.05943 89..947..4/03: 9748 .7  $8902 4:9 57393   3945..       03:  < 5:-./0:30020394  $8902 4:9 57393  $.4/ 5..:78.78039 0397./30 5.89. 70./  $8902 4:9 57393   $8902 4:9 57393  . 4 .89.39007 5.43/070././.4308 45.  < 5:-.

.

43/0:3203: .   < < 5:-.80$8902 09   -70.80..947.947.4/ ..0. 9748  .9. .05943 .7.  -70.. 89.... .

.

  .   YZS       /01../30 39-1.39007 5. 08 /0./0 .. 08 .78039 0397.:903:  -70. ..O3 1.947.947.7. 1:3.  $8902 4:9 57393 1.  $8902 4:9 5739 38079003:2074  39. 70./.947. ..

9.. 39.391.947.  .       $8902 4:9 57393   03:  < 5:-.89.  . 9748 .05943 1  .

.

 ..4147  709:73 < 080 709:73. 1.  ..947.

.

/.#0.947.:78.947..7  380790032074 1.425../0:30020394  $..:78./4.947.708905747..:78./0:30020394  $.2./  .43/070./ <<<  708:9./.7     YZS  ./   .43/070./..08  &9../008  &9.

9.7.7..:78O3 574.70.43. 5:08348 507290.425..:431394  8 25479./403:35747.9.:.5.2:.425094               &$ $ .7/O3/0089E8:/1. 70.3908 /0 30307J.7.8 . :9.  &3.9.039.2./08:8.7. 08/0.   $0:9.2..O3 /0 70.425:9.   YZS  .341:3./  5:0894 6:0   80 5708039.8 08 6:0 2:. .03./05747.:78O35:0/00307..O/45.2. /0 8:8 /08.477... 03 88902.70.4308.6:075747..:9..8 0830..7.4703903/20394  3480:9.7084:./5.8251. 03 89:.4.43.77048432:.34..3.4. 301.49/..390 03903/07 ./.3/448.       !74.748 5:0880.:78O33481.O/4 /090.08.425703/07.7:3.08 80:70248 97.431:3/7348  &3.4774/0.8080..:.5476:0.O/42502039.7.74.7 6:005747.039.3/4 .084.43  .:78. 70.2.424089:/.O3/0..2.

/ 547 6:0 2E8 6:0  2F94/48 70.. 7084.85....8 01.:35747.438/07.097.2.8:85.80.8 .424 ./47        #  $%#&%&#% $' &% ##$$    $#$& !&%  $%#&%&#% $ &% #$ &#!$&%    YZS% .-.425048 :9./.:78.248  348 .-7.:78.3/4 8:8.848  354.:/.430803-.4.07 574-02.48 08 :3 574.39074720390 05..       70.9.084  6:0 . .

Sign up to vote on this title
UsefulNot useful