Está en la página 1de 6

TECNOLÓGICO NACIONAL DE MÉXICO

INSTITUTO TECNOLÓGICO SUPERIOR DE APATZINGÁN


“2015, Año del Generalísimo José María Morelos y Pavón”

INGENIERÍA EN SISTEMAS COMPUTACIONALES

ESTRUCTURA DE DATOS

UNIDAD 2 “RECURSIVIDAD”

CONCEPTO DE RECURSIVIDAD Y PROCESOS RECURSIVOS

FRANCISCO JAVIER MENDOZA LICEA

PROFESOR: I.S.C. CARLOS SÁNCHEZ PEREZ

GRUPO A

Septiembre 2016

Km. 3.5 Carretera Apatzingán-Aguililla, Col. Tenencia de ChandioC.P. 60710, A.P. 49, Apatzingán, Michoacán,
Tel./Fax (453)-534-25-13 y (453)-534-03-71 WEB http://www.itsapatzingan.edu.mx, Email: itsapatzingan@itsa.edu.mx
Concepto de recursividad.
Los programas que hasta ahora hemos visto están estructuraos generalmente
como métodos que se llaman entre sí, de una manera disciplinada y jerárquica.
Sin embargo, para unos problemas es conveniente hacer que un método se llame
a sí mismo. Dicho método se conoce como método recursivo; este método se
puede llamar en forma directa o indirecta a través de otro método. [1]

Es preciso decir que la recursividad no es una estructura de datos, sino que es


una técnica de programación que nos permite que un bloque de instrucciones se
ejecute n veces. Reemplaza en ocasiones a estructuras repetitivas. [3]

Los métodos para solucionar problemas recursivos tienen varios elementos en


común. Cuando se hace una llamada a un método recursivo para resolver un
problema, el método en realidad es capaz de resolver el o los casos más simples,
o caso base. Si se hace una llamada al método con un caso base, el método
devuelve un resultado. Si se hace la llamada al método con un problema más
complejo, el método comúnmente divide el problema en dos piezas conceptuales:
una pieza que el método sabe resolver y otra pieza que no sabe cómo resolver.
Para que la recursividad sea factible, esta última pieza debe ser similar al
problema original, pero una versión ligeramente más sencilla o simple del mismo.
Debido a que este nuevo problema se parece al problema original, el método
llama a una nueva copia de sí mismo para trabajar en el problema más pequeño; a
esto se le conoce como llamada recursiva, y también como paso recursivo. [3]
Por lo general, el paso recursivo incluye una instrucción return, ya que su
resultado se combina con la parte del problema que el método supo cómo
resolver, para formar un resultado que se pasará de vuelta al método original que
hizo la llamada. [1]

Procedimientos recursivos.

Un procedimiento o función recursiva es aquella que se llama así misma. Esta


característica permite a un procedimiento recursivo repetir valores diferentes de
parámetros. La recursión es una alternativa a la iteración muy elegante en la
solución de problemas, especialmente si estos tienen naturaleza recursiva.
Normalmente, una solución recursiva es menos eficiente en términos de tiempo de
computadora que una solución iterativa debido al tiempo adicional de llamada a
procedimientos. En muchos casos, la recursión permite especificar una solución
más simple y natural para resolver un problema que en otro caso sería difícil. Por
esta razón la recursividad es una herramienta muy potente la resolución de
problemas de programación. [4]
Ahora que se vio un poco lo que es un método recursivo es hora de dar paso a los
ejemplos de recursividad en Java para entender de mejor manera como es que
funcionan.

// Fig. 15.5: CalculoFibonacci.java


// Método fibonacci recursivo.
/**
*Por Francisco Javier Mendoza Licea
*/

public class CalculoFibonacci


{
// declaración recursiva del método fibonacci
public long fibonacci( long numero )
{
if ( ( numero == 0 ) || ( numero == 1 ) ) // casos base
return numero;
else // paso recursivo
return fibonacci( numero - 1 ) + fibonacci( numero - 2 );
} // fin del método fibonacci

public void mostrarFibonacci()


{
for ( int contador = 0; contador <= 10; contador++ )
System.out.printf( "Fibonacci de %d es: %d\n", contador,
fibonacci( contador ) );
} // fin del método mostrarFibonacci
} // fin de la clase CalculoFibonacci

// Fig. 15.6: PruebaFibonacci.java


// Prueba del método recursivo fibonacci.
/**
* Por: Francisco Javier Mendoza Licea
*/

public class PruebaFibonacci


{
public static void main( String []args )
{
CalculoFibonacci calculoFibonacci = new CalculoFibonacci();
calculoFibonacci.mostrarFibonacci();
} // fin de main
} // fin de la clase PruebaFibonacci
El programa anterior calcula el n-ésimo numero de Fibonacci en forma recursiva ,
usando el método fibonacci. La llamada del método Fibonacci desde
mostrarFibonacci no es una llamada recursiva, pero todas las llamadas
supsiguientes a fibonacci que se llevan a cabo desde el cuerpo de fibonacci son
recursivas, ya que en este punto es el mismo método fibonacci el que inicia las
llamadas. [1]

A continuación se muestra otro tipo de recursividad de una manera más simple, en


una suma de dos números de manera recursiva.

/**
* Por Francisco Javier Mendoza Licea
*/
import java.util.Scanner;
class Recursividad1 {

public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
int n1, n2;
System.out.print("Introduzca primer numero: ");
n1 = sc.nextInt();
System.out.print("Introduzca segundo numero: ");
n2 = sc.nextInt();
System.out.println("suma: " + suma(n1, n2));

}
public static int suma(int a, int b) {
if (b == 0) {
return a;
} else if (a == 0) {
return b;
} else {
return 1 + suma(a, b - 1);
}
}
}

La solución recursiva para sumar dos números enteros se basa en lo siguiente:


Si uno de los números es igual a cero, la suma es el otro número.
Por ejemplo, si queremos sumar a=3 y b=0 la suma es igual a a: suma=3
si a == 0
la suma es b
sino si b == 0
la suma es a

Si ninguno de los dos números a sumar es igual a cero, la suma de ambos la


podemos expresar como:

suma = 1 + suma(a, (b-1))

Por ejemplo:
Dados los números a=3 y b =4
la suma de 3 + 4 es igual que sumar 1 + (3 + 3)
A su vez, sumar 3 + 3 es igual que 1 + (3 + 2). [6]
Fuentes:

Bibliográficas:

1. Como programar en Java 7ed. Deitel. Pág. 654.


2. Estructura de datos en Java. Luis Joyanes. Pág. 125.
3. Java 2, Curso de programación. Francisco Javier Ceballos.

Mesográficas:

4. http://www.tutorialesprogramacionya.com/javaya/detalleconcepto.php?codig
o=123&punto=&inicio=
5. http://www.scoop.it/t/estructura-de-datos
6. http://puntocomnoesunlenguaje.blogspot.mx/2013/01/ejemplo-recursividad-
sumar-dos-numeros.html

También podría gustarte