Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pgina 1
INSTITUTO
TECNOLOGICO DE TAPACHULA
CATEDRTICO: ING. ROSEL MUOS LPEZ
MATERIA:
RECURSIVIDAD Pgina 2
ESTRUCTURA DE DATOS UNIDAD II.- RECURSIVIDAD ALUMNOS: EMMANUEL DE JESUS ROBLES GONZALEZ EDUARDO BARTOLON ORTIZ EDI ALBERTO MORALES CRUZ CARRERA: ING. SISTEMAS COMPUTACIONALES
A 10 DE SEPTIEMBRE DE 2011.
INDICE
Contenido
INTRODUCCION:
RECURSIVIDAD
Pgina 3
INTRODUCCIN
El rea de la programacin es muy amplia y con muchos detalles. Los programadores necesitan ser capaces de resolver todos los problemas que se les presente a travs del computador aun cuando en el lenguaje que utilizan no haya una manera directa de resolver los problemas. En el lenguaje de programacin Java, as como en otros lenguajes de programacin, se puede aplicar una tcnica que se le dio el nombre de recursividad por su funcionalidad. Esta tcnica es utilizada en la programacin estructurada para resolver problemas que tengan que ver con el factorial de un nmero, o juegos de lgica. Las asignaciones de memoria pueden ser dinmicas o estticas y hay diferencias entre estas dos y se pueden aplicar las dos en un programa cualquiera. El mtodo recursivo es un mtodo que se llama as mismo directa o indirectamente. Existen dos clases de recursividad que son: recursin directa que es el proceso de por el que un mtodo se llama as mismo desde el propio cuerpo del mtodo, y la recursin indirecta implica ms d un mtodo. La recursividad indirecta implica que la existencia de dos mtodos: uno() y dos (). Entonces desde el main () llama a uno (), y a continuacin uno () llama a dos (). En alguna parte del proceso dos () llama a uno (), una segunda llamada a uno (). Esta accin es recursin indirecta, por eso es recursiva, ya que uno () ha sido llamado dos veces, sin retornar nunca a su llamadora.
RECURSIVIDAD
Pgina 4
RECURSIVIDA DEFINICION:
RECURSIVIDAD
Pgina 5
Es una alternativa diferente para implementar estructuras de repeticin (ciclos). Los mdulos se hacen llamadas recursivas. Se puede usar en toda situacin en la cual la solucin pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas. Un mtodo recursivo es aquel que se llama a s mismo, bien directamente o bien a travs de otro mtodo. La recursividad es un concepto fundamental en matemticas y en computacin. Recursividad es una tcnica de programacin importante. Se utiliza para realizar una llamada a una funcin desde la misma funcin. Recursividad y la iteracin (ejecucin en bucle) estn muy relacionadas, cualquier accin que pueda realizarse con la recursividad puede realizarse con iteracin y viceversa. La recursin en los subprogramas puede darse de dos maneras diferentes:
a) Directa: el subprograma se llama directamente a s mismo. Por ejemplo, un
al primero. Por ejemplo, el subprograma P llama al subprograma Q y este a su vez invoca al primero (fig. 1). Tambin se da la recursin indirecta cuando el subprograma llama a otro y este a un tercero. Una vez ejecutado, el control regresa al subprograma que lo llamo; lo mismo sucede en todos sus niveles. Por ejemplo, el subprograma P que llama al subprograma Q, y este llama al subprograma
RECURSIVIDAD
Pgina 6
RECURSIVIDAD
Pgina 7
Es fcil crear una funcin recursiva que no llegue a devolver nunca un resultado definitivo y no pueda llegar a un punto de finalizacin. Este tipo de recursividad hace que el sistema ejecute lo que se conoce como bucle "infinito".
public class Recurividad // se declara la clase { static int mtodo(int a) // este es un mtodo recursivo donde su parmetro a adquiere el valor de x. { a++; // se incrementa la variable a. return mtodo(a); // este es el llamado al mtodo as mismo donde no tiene fin } public static void main(string arg []) // este es el metodo main donde java ejecuta los programas { int x; // declaracion de una variable local x del mtodo main. x=Integer.parseInt(JOptionPane.showInputDialog(null,introduaca numero)); // pedimos el valor de x. metodo(x); // se manda a llamar al mtodo statico. } }
RECURSIVIDAD
Pgina 8
Los parmetros y variables locales toman nuevos valores en cada llamada (no se trabaja con los anteriores). Un procedimiento o funcin se dice recursivo si durante su ejecucin se invoca directa o indirectamente a s mismo. Esta invocacin depende al menos de una condicin que acta como condicin de corte que provoca la finalizacin de la recursin. Un algoritmo recursivo consta de: 1- Al menos un caso trivial o base, es decir, que no vuelva a invocarse y que se ejecuta cuando se cumple cierta condicin, y 2- el caso general que es el que vuelve a invocar al algoritmo con un caso ms pequeo del mismo.
public class Recurividad // se declara la clase { static int mtodo(int a) // este es un mtodo recursivo donde su parmetro a adquiere el valor de x. { If(a==0) // este es una sentencia de control para finalizar la recursividad { a--; // se le resta 1 al valor de la variable a . // a este se le denomina caso base por qu no se vuelve a invocar al mismo mtodo. } Else { return mtodo(a); // este es el llamado al mtodo as mismo donde no tiene fin // Tambin se le denomina caso GENERAL por que se llama as mismo } } public static void main(string arg []) // metodo main donde java ejecuta los programas { int x; // declaracion de una variable local x del mtodo main. x=Integer.parseInt(JOptionPane.showInputDialog(null,introduaca numero)); // pedimos el valor de x. metodo(x); // se manda a llamar al mtodo statico. } }
RECURSIVIDAD
Pgina 9
llamada recursiva por rama del condicional, de manera que la cantidad de llamadas recursivas puede calcularse como una funcin lineal que depender de la velocidad con la cual progresa hacia el caso base. sta a su vez la subdividimos en:
1. Recursin por la cola: es cuando la llamada recursiva se hace al final
del mtodo, no quedan operaciones pendientes sobre los datos, de manera que no hace falta representar con una pila las variables de cada llamada, y el mtodo recursivo lo podramos transformar tranquilamente en un bucle iterativo.
2. Recursin no por la cola: es cuando despus de ejecutar todas las
llamadas recursivas el mtodo debe realizar una operacin pendiente para completar el proceso.
2. Recursin no lineal: Un mtodo recursivo es no lineal, si hay ms de una
llamada a la funcin recursiva, su complejidad en trmino de llamadas recursivas ser una funcin exponencial de la profundidad del rbol de las llamadas.
2. Recursin anidada: es cuando alguna llamada recursiva recibe como
parmetro a una llamada recursiva, su complejidad en trmino de llamadas recursivas resultar mucho ms difcil de calcular.
FUNCIN RECURSIVA
Las funciones recursivas se componen de:
RECURSIVIDAD
Pgina 10
Caso base: una solucin simple para un caso particular (puede haber ms
de un caso base). La secuenciacin, iteracin condicional y seleccin son estructuras vlidas de control que pueden ser consideradas como enunciados. NOTA: Regla recursiva Las estructuras de control que se pueden formar combinando de manera vlida la secuenciacin, iteracin condicional y seleccin tambin son vlidos.
Caso recursivo: una solucin que involucra volver a utilizar la funcin
original, con parmetros que se acercan ms al caso base. Los pasos que sigue el caso recursivo son los siguientes:
1. El procedimiento se llama a s mismo. 2. El problema se resuelve, resolviendo el mismo problema pero de
tamao menor. 3. La manera en la cual el tamao del problema disminuye asegura que el caso base eventualmente se alcanzar.
RECURSIVIDAD
Pgina 11
Al ejecutar una aplicacin Java, la memoria usada por la aplicacin se divide en distintas zonas:
Fig. 3 Esquema en el que se divide la memoria en un programa recursivo. Programas: En una zona de memoria se cargan los bytecodes correspondientes a las clases que forman parte de la aplicacin. Zona esttica. Donde se almacenan las variables de clase (declaradas con static) Datos compartidos (datos globales). Datos que han de mantenerse ms all de la duracin de la invocacin de un mtodo o de la vida de un objeto. Pila. Es una coleccin lineal, dinmica y homognea, en la que los elementos se insertan y se extraen por el mismo extremo. Tambin conocida como estructura LIFO (Last In, First Out). Operaciones:
RECURSIVIDAD
Pgina 12
obteniendo.
Ejemplo
RECURSIVIDAD
Pgina 13
static int potencia (int x, int n) { if(n==0) // Caso base return 1; else // Caso general return x * potencia(x, n-1); }
Expresin de forma recursiva. Puede incluirse pasos adicionales (para combinar las soluciones parciales).
RECURSIVIDAD
Pgina 14
Siempre se debe avanzar hacia un caso base: Las llamadas recursivas simplifican el problema y, en ltima instancia, los casos base nos sirven para obtener la solucin.
Los casos base corresponden a situaciones que se pueden resolver con facilidad. Los dems casos se resuelven recurriendo, antes o despus, a alguno(s) de los casos base.
De esta forma, podemos resolver problemas complejos que seran muy difciles de resolver directamente.
Un requisito importante para que sea correcto un algoritmo recursivo es que no genere una secuencia infinita de llamadas as mismo. Claro que cualquier algoritmo que genere tal secuencia no termina nunca. Una funcin f se debe llamar as mismo y no debe de contener ningn bucle repetitivo (while, do while o for). Una funcin recursiva f debe definirse en trminos que no impliquen a f al menos en un argumento o grupo de argumentos. Debe existir una salida de la secuencia de llamadas recursivas. Si en esta salida no puede calcularse ninguna funcin recursiva. Cualquier caso de definicin recursiva o invocacin de un algoritmo recursivo tiene que reducirse a la larga a alguna manipulacin de uno o casos ms simples no recursivos.
La recursividad es una tcnica de programacin importante. Se utiliza para realizar una llamada a una funcin desde la misma funcin. Como ejemplo til se puede presentar el clculo de nmeros factoriales. l factorial de 0 es, por definicin, 1. Los factoriales de nmeros mayores se calculan mediante la multiplicacin de 1 * 2 *..., incrementando el nmero de 1 en 1 hasta llegar al nmero para el que se est calculando el factorial.
RECURSIVIDAD
Pgina 15
PSEUDOCDIGO FACTORIAL
Inicio Variables N,Fact,aux. Imprimir "Introduce el nmero: " Leer N aux= n-1. fact=n Hacer fact=fact * aux. Hasta que aux=1 Imprimir "El factorial de ", n, "es:", fact Fin.
RECURSIVIDAD
Pgina 16
Factorial calculado de forma recursiva: Static int factorial (int n) { Int resultado; if (n==0) // Caso base resultado=1; else // Caso general resultado=n*factorial(n-1); return resultado; }
RECURSIVIDAD
Pgina 17
Esta es la definicin recursiva de la funcin factorial, ya que se define en trminos de s misma. La primera regla de la definicin, o caso base, establece la condicin de terminacin. Las definiciones recursivas nos permiten definir un conjunto infinito de objetos mediante una sentencia finita.
Una sucesin de Fibonacci es aquella cuya ley de recurrencia es: an = an-1 + an-2 Es decir, cada trmino de la sucesin se obtiene sumando los dos anteriores. Para empezar a construirla necesitamos, por tanto, dos nmeros de partida, a1 y a2. De esta forma, a3 sera a2 + a1 ; a4 sera a3 + a2 y as sucesivamente. La ms conocida es la que tiene a1 = 1 y a2 = 1, cuyos trminos son: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 ... Nmeros cuales todos son los que son conocidos como Nmeros de Fibonacci. Los trminos de cualquier sucesin de Fibonacci tienen la particularidad de que el cociente entre dos trminos consecutivos se aproxima al Nmero de Oro (1.6180339887499...), es decir, el lmite de los cocientes an+1/an tiende al Nmero de Oro cuando n tiende a infinito.
Frmula recursiva fibonacci(n) = fibonacci (n - 1) + fibonacci (n - 2) Caso base: Fib (0)=0; Fib (1)=1 Caso recursivo: Fib (i) = Fib (i -1) + Fib(i -2) public static int fib(int n) { if (n <= 1)
RECURSIVIDAD Pgina 19
return n; else
return fib(n-1)+fib(n-2); }
RECURSIVIDAD
Pgina 20
RECURSIVIDAD
Pgina 21
b (formal parameters)
La recursividad indirecta es aquella que se llama asi mismo pero tambin puede llamar a otro mtodo recursivo dentro del primero mtodo, como en el ejemplo anterior el mtodo a llama el mtodo b dentro de su estructura y el mtodo b llama al mtodo a tambin dentro de su estructura. Claro que un mtodo recursivo tambin tienen que ser finito. Conclusin:
Cuando un procedimiento incluye una llamada a s mismo se conoce como
recursin directa.
Cuando un procedimiento llama a otro procedimiento y ste causa que el
procedimiento original sea invocado, se conoce como recursin indirecta. NOTA: Cuando un procedimiento recursivo se llama recursivamente a si mismo varias veces, para cada llamada se crean copias independientes de las variables declaradas en el procedimiento.
Un ejemplo de recursividad indirecta es el de calcular si un nmero es primo o no. public class Primo
RECURSIVIDAD Pgina 22
{ static int z=1; static int pri(int q) { z++; if(z<x) return sec(q); else return 0; } static int sec(int y) { if(y%z==0) return 1; else return pri(y); } public static void main(String arg[]) { int x; x=Integer.parseInt(JOptionPane.showInputDialog(null,"Introdusca Numero")); if(pri(x)==0) JOptionPane.showMessageDialog(null,"El Numero ES Primo"); else JOptionPane.showMessageDialog(null,"El Numero NO es Primo"); } } En el cdigo anterior la clase primo est constituida por dos mtodos recursivos los cuales son pri(int q) con parameto entero q y el segundo es sec(int y) con parmetro y, que al momento de ejecutarlo, en el main se crea una variable local x la cual nos pide un valor, despus de asignarle un valor entero a x entrasmos una condicin en la cuan dentro de la condicin mandamos a llamar al primero mtodo (pri(x)) el cual le pasamos el valor de x y q lo recibe y dentro del primer mtodo hay otra condicin si es verdadera manda a llamar al segundo mtodo (sec(q)) al cual le pasamos el valor de q y dentro del segundo mtodo madamos a llamar el primer mtodo y asi sucesivamente hasta que la recursividad llegue a su fin y nos devuelva un valor.
RECURSIVIDAD
Pgina 23
tamaos.
El enigma comienza con todos los aros colocados en el asta A de tal forma
que ninguno de ellos debe estar sobre uno ms pequeo a l; es decir, estn apilados, uno sobre el otro, con el ms grande hasta abajo, encima de l, el siguiente en tamao y as sucesivamente.
El propsito del enigma es lograr apilar los cincos aros, en el mismo orden,
pero en el hasta C.
RECURSIVIDAD
Pgina 24
CMO RESOLVEMOS EL PROBLEMA? Para encontrar cmo se resolvera este problema, debemos ir viendo cmo se resolvera cada caso.
RECURSIVIDAD
Pgina 25
Colocando el ms pequeo en el asta B, pasando el grande a el asta C y despus moviendo el que est en B a C.
mover Movemos los n-1 aros superiores - es decir, sin contar el ms grande- de A a B (utilizando a C como auxiliar). Movemos el ltimo aro (el ms grande) de A a C.
RECURSIVIDAD Pgina 26
pequeos, generalmente del mismo tamao, resolver los subproblemas y entonces combinar sus soluciones para obtener la solucin del problema original.
Dividir para vencer es una tcnica natural para las estructuras de datos, ya
que por definicin estn compuestas por piezas. Cuando una estructura de tamao finito se divide, las ltimas piezas ya no podrn ser divididas.
RECURSIVIDAD
Pgina 27
} }
RECURSIVIDAD
Pgina 28
vez causando que la capacidad de la computadora se exceda antes de obtener una respuesta.
La cuestin de la claridad en la solucin es, no obstante, un factor
importante.
En algunos problemas una solucin recursiva es ms simple y ms natural
escribir.
RECURSIVIDAD
Pgina 29
La profundidad (el nmero de niveles) de las llamadas recursivas hechas antes de llegar a la terminacin. A mayor profundidad, mayor espacio y tiempo de ejecucin. La cantidad de recursos consumidos en cada nivel de la recursin.
La ejecucin de un programa se puede diagramar trazando la ruta de ejecucin y creando una jerarqua con la llamada inicial en el tope. El diagrama resultante puede utilizarse para analizar el tiempo y el espacio del algoritmo.
RECURSIVIDAD ARBOLES
Los arboles representan las estructuras dinmicas y no lineales ms interesantes ms interesantes de la computacin. Las estructuras balanceadas o AVL en la estructura de datos ms eficiente para trabajar en la memoria rpida de la computacin. Por otra parte, la estructura de datos Arboles-B, representa la estructura de datos ms eficiente para trabajar en memoria secundaria dispositivos de almacenamiento secundario-.
RECURSIVIDAD
Pgina 30
Los rboles son una estructura inherentemente recursiva y todas las operaciones que se realizan en rboles se deben programar en forma recursiva. A diferencia de otras estructuras en las cuales las operaciones se pueden implementar tanto en forma recursiva como en forma iterativa, independiente de las diferencias que se pueden observar en cuanto a eficiencia en los rboles se puede trabajar en forma recursiva.
RECURSIVIDAD
Pgina 31
El mtodo se basa en dividir los n elementos de la lista a ordenar en 3 partes o particiones: una particin izquierda, una particin central que solo contiene un elemento llamado pivote, y una particin derecha. La particin o divisin se hace de tal forma que todos los elementos de la primera sublista (particin izquierda) son menores que todos los elementos de la sublista (particin derecha). Las dos sublista se ordenan entonces independientemente. La lista se divide en dos particiones (sublistas) eligiendo un elemento de la lista que se utiliza como pivote o elemento de particin. Si se elige una lista cualquiera con los elementos ordenados aleatoriamente, se puede elegir cualquier elemento de la lista como elemento pivote, por ejemplo, el primer elemento de la lista. Si la lista tiene algn orden parcial, que se conoce, se puede tomar otra decisin para el pivote. Idealmente, el pivote se debe elegir de modo que se divida la lista exactamente por la mitad, de acuerdo al tamao relativo de las claves. Por ejemplo si se tiene una lista de elementos del 0 al 10, el pivote podran ser el 5 o 6.
RECURSIVIDAD
Pgina 32
Una vez que el pivote ha sido elegido se utiliza para ordenar la lista en dos sublistas: una tiene todos los elemento menores que el pivote y la otra particin todos los mayores o iguales que el pivote. Estas dos listas parciales se ordenan recursivamente, utilizando el mismo algoritmo, es decir, se llama sucesivamente al propio algoritmo Quitsort. La lista final ordenada se consigue concatenando la primera sublista, el pivote y la segunda sublista, en ese orden, es una nica lista.
RECURSIVIDAD
Pgina 33
ESTE PROGRAMA ES UN METODO DE ORDENAMIENTO RAPIDO CON RECURSIVIDAD TE ORDENA DE MENOR A MYOR DE UNA SERIE DE NUMEROS ENTEROS POSITIVOS. public class Quicksort { public void captura() { int n, a[]; String c=""; n=Integer.parseInt(JOptionPane.showInputDialog(null,"Cuantos elementos a ordenar")); a=new int[n]; for(int x=0; x<n; x++) { a[x]=Integer.parseInt(JOptionPane.showInputDialog(null,"Introdusca el numero "+x)); if(x==n-1) quicksort(a,0,n-1); } c="Los numeros ordenados son\n"; for(int x=0; x<n; x++) { c=c+"Array["+x+"]="+a[x]+"\n"; } JOptionPane.showMessageDialog(null,""+c); }
void quicksort(int a[], int primero, int ultimo) { int i, j, central; int pivote; central=(primero + ultimo)/2; pivote=a[central]; i=primero; j=ultimo; do { while (a[i]<pivote) { i++; } while (a[j]>pivote) { j--; } if(i<=j) { int tmp; tmp=a[i]; RECURSIVIDAD Pgina 34
a[i]=a[j]; a[j]=tmp; i++; j--; } } while(i<=j); if(primero<j) quicksort(a,primero,j); if(i<ultimo) quicksort(a,i,ultimo); } public static void main(String ar[]) { Quicksort ob=new Quicksort(); ob.captura(); } }
RECURSIVIDAD
Pgina 35
PROGRAMA RECURSIVO QUE HACE EL LLENADO DE UN ARREGLO Y LO IMPRIME EN UNA SOLA VENTANA Y TAMBIEN LA IMPRIME POR ARREGLO. public class Arreglo { static String a="",Llena[];; static int x,z=-1,tam; static String llena(int w) { if(w==0); else { z++; Llena[z]=JOptionPane.showInputDialog(null,"Introdusca Numero"); a=a+"Arreglo ["+z+"] = "+Llena[z]+"\n"; llena(w-1); } return a; } static void impri() { for(int s=0;s<tam;s++) { JOptionPane.showMessageDialog(null,"Arreglo ["+s+"] = "+Llena[s]); } } public static void main(String a[]) { tam=Integer.parseInt(JOptionPane.showInputDialog(null,"CUANTOS NUMERO DESEA AGREGAR")); Llena= new String [tam]; JOptionPane.showMessageDialog(null,"EL ARREGLO ES : \n\n"+llena(tam)); impri(); } }
RECURSIVIDAD
Pgina 36
public class Combinaciones_n_C_r { static int com(int n,int r) { if(r==0 || n==0) { return 1; } else { if(r==0) { return n; } else { return com(n-1,r)+com(n-1,r-1); } } } public static void main (String arg[]) { int a,b; a=Integer.parseInt(JOptionPane.showInputDialog(null,"Introduaca Numero N")); b=Integer.parseInt(JOptionPane.showInputDialog(null,"Introduaca Numero r")); JOptionPane.showInputDialog(null,"Combunatorio "+a+" C "+b+" = "+com(a,b)); } }
RECURSIVIDAD
Pgina 37
public class Impre_Hola { void imp(int z) { if(z<3) { JOptionPane.showMessageDialog(null,"HOLA "); imp(z+1); } else JOptionPane.showMessageDialog(null,"SHAO"); } public static void main(String arg[]) { Impre_Hola o=new Impre_Hola(); o.imp(0); } }
RECURSIVIDAD
Pgina 38
public class MaxCD { static int MCD(int a, int b) { if(a!=b) { if(a>b) { a=a-b; } else { b=b-a; } return MCD(a,b); } return a; } public static void main(String arg[]) { MaxCD a=new MaxCD(); int p,q; p=Integer.parseInt(JOptionPane.showInputDialog(null,"Inttodusca primer numero")); q=Integer.parseInt(JOptionPane.showInputDialog(null,"Introdusca segundo numero")); JOptionPane.showMessageDialog(null,"el maximo comun divisor es: " +MCD(p, q)); } }
RECURSIVIDAD
Pgina 39
ESTE PROGRAMA CALCULA EL MAXIMO COMUN DIVISOR DE 2 NUMERO ENTEROS POSITIVOS (DIFERENTE LOGICA). public class MaxComDiv { static int mcd(int m,int n) { if(n<=m && m%n==0) return n; else if(m<n) return mcd(n,m%n); else return mcd(n,m%n); } public static void main(String arg[]) { MaxComDiv o = new MaxComDiv(); int m,n; do { m=Integer.parseInt(JOptionPane.showInputDialog(null,"INTRODUSCA EL PRIMER NUMEO")); n=Integer.parseInt(JOptionPane.showInputDialog(null,"INTRODUSCA SEGUNDO NUMERO")); } while(n<=0 || m<=0); JOptionPane.showMessageDialog(null,"EL MAXIMO COMUN DIVISOR ES: "+mcd(m,n)); } }
RECURSIVIDAD
Pgina 40
public class Mayor_n { static int i=-1,tn,a[],x; public void cap() { tn=Integer.parseInt(JOptionPane.showInputDialog(null,"CUANTOS NUMERO")); a=new int [tn]; JOptionPane.showMessageDialog(null,"EL MAYOR ES "+mayor()); } static int mayor() { i++; if(i<tn) { a[i]=Integer.parseInt(JOptionPane.showInputDialog(null,"Intodusca Numero")); if(x<a[i]) { x=a[i]; return mayor(); } return mayor(); } return x; } public static void main(String arg[]) { Mayor_n o=new Mayor_n(); o.cap(); } }
RECURSIVIDAD
Pgina 41
ESTE PROGRAMA CALCULA EN MENOR DE N NUMERO POSITIVOS. public class Menor_n { static int i=-1,tn,a[],x; public void cap() { tn=Integer.parseInt(JOptionPane.showInputDialog(null,"CUANTOS NUMERO")); a=new int [tn]; JOptionPane.showMessageDialog(null,"EL MENOR ES "+menor()); } static int menor() { i++; if(i<tn) { a[i]=Integer.parseInt(JOptionPane.showInputDialog(null,"Intodusca Numero")); if(i==0) { x=a[i]; return menor(); } else { if(x>a[i]) { x=a[i]; return menor(); } else { return menor(); } } } return x; } public static void main(String arg[]) { Menor_n o=new Menor_n(); o.cap(); } } ESTE PROGRAMA CALCULA SI UN NUMERO ES PAR O IMPAR.
RECURSIVIDAD
Pgina 42
public class Par_Inpar { public int pi(int x) { if(x%2==0) { return 0; } else { return 1; } } public static void main(String arg[]) { int z; Par_Inpar p=new Par_Inpar(); z=Integer.parseInt(JOptionPane.showInputDialog(null,"INTRODUSCA NUMERO")); if(p.pi(z)==0) { JOptionPane.showMessageDialog(null,"EL NUMERO ES PAR"); } else { JOptionPane.showMessageDialog(null,"EL NUMERO NO PAR"); } } }
RECURSIVIDAD
Pgina 43
public class Potencia_de_un_numero { static int potencia(int x,int y) { if(y==0) { return 1; } else { return x*potencia(x,y-1); } } public static void main(String arg[]) { int a,b; a=Integer.parseInt(JOptionPane.showInputDialog(null,"Introduaca Numero")); b=Integer.parseInt(JOptionPane.showInputDialog(null,"Introduaca Potencia")); JOptionPane.showInputDialog(null,"Resulatado "+a+" ^ "+b+" = "+potencia(a,b)); } }
public class Sum_n { int z; public int sum(int x) { z=Integer.parseInt(JOptionPane.showInputDialog(null,"Introdusca Nuemro")); if(x==1) return z;
RECURSIVIDAD
Pgina 44
else return z+ sum(x-1); } public static void main (String arg []) { int a; Sum_n ob= new Sum_n (); a=Integer.parseInt(JOptionPane.showInputDialog(null,"CUANTOS NUMEROS")); JOptionPane.showMessageDialog(null,"LA SUMA ES: "+ ob.sum(a)); } }
public class alfabeto { static String a=""; public static void main (String [] arg) { metodoA('Z'); JOptionPane.showMessageDialog(null,a); } static void metodoA(char c) { RECURSIVIDAD Pgina 45
BIBLIOGRAFA
Allen Weiss, Mark. Estructura de datos en Java. Addison Wesley. pp. 165-201.
Pgina 46
RECURSIVIDAD
Joyanes, Aguilar Luis. Fundamentos de programacin:Algoritmos, Estructura de datos y objetos. Mc Graw Hill. pp. 537-568.
http://ocw.udem.edu.mx
http://www.itescam.edu.mx/principal/sylabus/fpdb/recurs os/r4886.PDF
RECURSIVIDAD
Pgina 47