top of page

recursividad

CONCEPTOS BÁSICOS

• Un objeto es recursivo cuando se define 

en función de sí mismo, es decir, interviene 

en su propia definición.

• La recursividad es la propiedad mediante 

la cual un subprograma o rutina puede 

llamarse a sí mismo.

• Utilizando la recursividad, la resolución de 

un problema se reduce a uno esencialmente 

igual pero algo menos complejo.

• Características que deben cumplir los 

problemas recursivos:

– La recursividad debe terminar alguna vez: caso 

base

– Cada nueva formulación estamos más cerca 

del caso final (o base).EJEMPLO DE PRO

 

 

 

 

 

 

 

Problema 1:

Implementación de un método recursivo.

Programa:

public class Recursividad { void repetir() { repetir(); } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.repetir(); } }

La función repetir es recursiva porque dentro de la función se llama a sí misma.
Cuando ejecuta este programa se bloqueará y generará una excepción: "Exception in thread "main" java.lang.StackOverflowError"

Analicemos como funciona:
Primero se ejecuta la función main, luego de crear un objeto llamamos a la función repetir.
Hay que tener en cuenta que cada vez que se llama a una función se reservan 4 bytes de la memoria que se liberarán cuando finalice su ejecución.
La primera línea de la función llama a la función repetir, es decir que se reservan 4 bytes nuevamente. Se ejecuta nuevamente una instancia de la función repetir y así sucesivamente hasta que la pila estática se colme y se cuelgue el programa.

Problema 2:

Implementación de un método recursivo que reciba un parámetro de tipo entero y luego llame en forma recursiva con el valor del parámetro menos 1.

Programa:

public class Recursividad { void imprimir(int x) { System.out.println(x); imprimir(x-1); } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.imprimir(5); } }

Desde la main se llama a la función imprimir y se le envía el valor 5. El parámetro x recibe el valor 5. Se ejecuta el algoritmo de la función, imprime el contenido del parámetro (5) y seguidamente se llama a una función, en este caso a sí misma (por eso decimos que es una función recursiva), enviándole el valor 4.
El parámetro x recibe el valor 4 y se imprime en pantalla el cuatro, llamando nuevamente a la función imprimir enviándole el valor 3.
Si continuamos este algoritmo podremos observar que en pantalla se imprime:

5 4 3 2 1 0 ?1 ?2 ?3 . . . . . . . . .

hasta que se bloquee el programa.Tener en cuenta que cada llamada a una función consume 4 bytes por la llamada y en este caso 4 bytes por el parámetro x. Como nunca finaliza la ejecución completa de las funciones se desborda la pila estática por las sucesivas llamadas.

 

Problema 3:

Implementar un método recursivo que imprima en forma descendente de 5 a 1 de uno en uno.

Programa:

public class Recursividad { void imprimir(int x) { if (x>0) { System.out.println(x); imprimir(x-1); } } public static void main(String[] ar) { Recursividad re=new Recursividad(); re.imprimir(5); } }

Ahora si podemos ejecutar este programa y observar los resultados en pantalla. Se imprimen los números 5 4 3 2 1 y no se bloquea el programa.
Analice qué sucede cada vez que el if (x>0) se evalúa como fal

bottom of page