Está en la página 1de 28

Planteamiento del Ejercicio acompaado del algoritmo de resolucin en Java

Planteamiento: Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un nmero. Solucin: Cdigo 1. 2. 3. 4. } int factorial(int n){ if(n==0) return 1; //AXIOMA //FORMULA RECURSIVA else return n*factorial(n-1);

Planteamiento: Ejercicio 2. Programar un algoritmo recursivo que calcule un nmero de la serie fibonacci. Solucin: Cdigo 1. 2. 3. 4. } int fibonaci(int n){ if(n==1 || n==2) return 1; else return fibonaci(n-1)+fibonaci(n-2);

Planteamiento: Ejercicio 3. Programar un algoritmo recursivo que permita hacer la divisin por restas sucesivas. Solucin: Cdigo 1. 2. 3. 4. 5. 6. } int division (int a, int b) { if(b > a) return 0; else return division(a-b, b) + 1;

7.

Planteamiento: Ejercicio 4. Programar un algoritmo recursivo que permita invertir un nmero. Ejemplo: Entrada: 123 Salida: 321 Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. } { if (n < 10) return n; else return (n % 10) + invertir (n / 10) * 10; //caso base int invertir (int n)

Planteamiento: Ejercicio 5. Programar un algoritmo recursivo que permita sumar los dgitos de un nmero. Ejemplo: Entrada: 123 Resultado:6 Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. } { if (n == 0) return n; else return sumar_dig (n / 10) + (n % 10); //caso base int sumar_dig (int n)

Planteamiento: Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicacin, utilizando el mtodo Ruso. Para mas informacion: aqui.

Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. } if(A%2!=0){ return(B+mult_rusa( A/2 , B*2)); } else{ return(mult_rusa( A/2 , B*2)); } } { if(A==1){ return (B); int mult_rusa(int A, int B)

Planteamiento: Ejercicio 7. Programar un algoritmo recursivo que permita sumar los elementos de un vector. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. } { if (n == 0) return v [n]; else return suma_vec(v, n - 1) + v [n]; int suma_vec(int v [], int n)

Planteamiento: Ejercicio 8. Programar un algoritmo recursivo que permita multiplicar los elementos de un vector. Solucin: Cdigo

1. 2. 3. 4. 5. 6. } {

int multiplicar (int vec [], int tam) if (tam == 0) return (vec [0]); return (vec [tam] * multiplicar (vec, tam - 1));

Planteamiento: Ejercicio 9. Programar un algoritmo recursivo que calcule el Maximo comun divisor de dos nmeros. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. } else return sacar_mcd(b, a % b); int sacar_mcd(int a, int b) { if(b==0) return a;

Planteamiento: Ejercicio 10. Programar un algoritmo recursivo que determine si un nmero es positivo. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. 8. public boolean negativo(int n){ if(n<0) return false; else return positivo(n); } public boolean positivo(int n){ if(n>0) return true; else return negativo(n);

9.

Planteamiento: Ejercicio 11. Programar un algoritmo recursivo que determine si un nmero es impar utilizando recursividad cruzada. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. 8. 9. } public boolean impar(int n){ if(n==0) return false; else return par(n-1); } public boolean par(int n){ if(n==0) return true; else return impar(n-1);

Planteamiento: Ejercicio 12. Programar un algoritmo recursivo que permita sumar los elementos de una matriz. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. } else return mat [fila] [col] + suma (fila, col - 1, orden, mat); { if (fila == 0 && col == 0) return mat [0] [0]; else if (col < 0) return suma (fila - 1, orden, orden, mat); int suma (int fila, int col, int orden, int mat [] [])

Planteamiento: Ejercicio 13. Programar un algoritmo recursivo que permita resolver el cuadro latino. Ejemplo de cuadro latino: 0 0 0 0 1 0 0 0 1 2 0 0 1 2 3 0 1 2 3 4 1 2 3 4 5

Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. } } else { mat [fila] [col] = cont; latino (fila, col - 1, orden + 1, orden, mat); { if (fila == 0 && col == 0) mat [0] [0] = 1; else if (fila == col) latino (fila - 1, orden - 1, orden, orden, mat); latino (int fila, int col, int cont, int orden, int mat [] [])

Planteamiento: Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz: 1 1 1 1 1 1 2 2 2 2 1 2 4 4 4 1 2 4 8 8 1 2 4 8 16

Solucin: Solucionado por: AmeRiK@nO Cdigo 1. public class MatrizRecursividad { 2. 3. private static int a=0, aux=1, b=0; //Declaramos los datos necesarios

4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.

private static int[][] matriz = new int[6][6]; //La matriz debe ser cuadrada public static void main(String[] args) { llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo imprimir(); //imprimimos la matriz } public static void llenarMatriz(int matriz[][], int i, int j){ if(j > matriz.length -1){ //Si lleg a la ultima coluna, reseteamos los datos para la siguiente i++; j=0; aux++; } if(i <matriz.length){ // compara que no hallamos llegado al final

21. 22. 23. aux=1 24. 25. 26. 27. 28. 29. escala 30. a ingresar 31. 32. 33. 34. 35. 36. 37. 38. } } } else matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la fila anterior (i-1) llenarMatriz(matriz, i, j+1); matriz[i][j] = j+1; if(j==0)// comprobamos si es el primer digito } else{ //si no, asignamos los valores anteriores de la else matriz[i][j] = matriz[i][i1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2 llenarMatriz(matriz, i , j+1); matriz[i][j] = matriz[i][j]=aux; if(i==(aux-1) && j >= (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente if(i==0)// si es la primera fila ingresamos

39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. }

public static void imprimir(){ //este metodo nos imprime la matriz por consola for(int i=0; i< matriz.length; i++){ for(int j=0; j< matriz.length; j++){ System.out.print(matriz[i][j] + " "); } System.out.print("\n"); } }

Planteamiento: Ejercicio 15. Programar un algoritmo recursivo que ejecute la matriz del cubo mgico. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. } else { if (colmedio == n) { } else { if (fil < 0) { magico(mat, n - 1, colmedio, c, n); } else { if (fil < 0 && colmedio == n) { magico(mat, fil + 2, n - 1, c, n); { mat [n-1] [colmedio] = c; void magico(int mat [] [], int fil, int colmedio, int c, int n) { if (c == n * n)

23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. } } } } } } else {

magico(mat, fil, 0, c, n);

if (mat [fil] [colmedio] == 0) { mat [fil] [colmedio] = c; magico(mat, fil - 1, colmedio + 1, c + 1, n); } else { magico(mat, fil + 2, colmedio - 1, c, n); }

Planteamiento: Ejercicio 16. Programar un algoritmo recursivo que muestre el numero menor de un vector. Solucin: Cdigo 1. 2. 3. 4. 5. 6. 7. else if (menor > x [n]) return menorvec (x, n - 1, x [n]); else return menorvec (x, n - 1, menor); } int menorvec (int x [], int n, int menor) { if (n == 0) if (menor > x [n]) return x [0]; else return menor;

Planteamiento: Ejercicio 17. Programar un algoritmo recursivo que muestre el numero mayor de un vector. Solucin:

Cdigo 1. 2. 3. 4. 5. 6. 7. 8. 9. } } int mayor (int numeros [], int posicion) { int aux; if (posicion == 0) return numeros [posicion]; else { aux = mayor (numeros, posicion - 1); if (numeros [posicion] > aux) return numeros [posicion]; else return mayor (numeros, posicion - 1);

Citar

Recursividad
1.1. Introduccin. El concepto de recursividad va ligado al de repeticin. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una funcin, son llamados desde ella misma una y otra vez, en contraposicin a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc. 1.2. Definicin. Algo es recursivo si se define en trminos de s mismo (cuando para definirse hace mencin a s mismo). Para que una definicin recursiva sea vlida, la referencia a s misma debe ser relativamente ms sencilla que el caso considerado. 1.3. Elementos de la Recursin 1.3. 1. Axioma Es un caso donde el problema puede resolverse sin tener que hacer uso de una nueva llamada a s mismo. Evita la continuacin indefinida de las partes recursivas. 1.3.2. Formula recursiva Relaciona el resultado del algoritmo con resultados de casos ms simples. Se hacen nuevas llamadas a la funcin, pero estn ms prximas al caso base. Por ejemplo: El factorial de un nmero factorial(0) factorial(1) factorial(2) factorial(3) factorial(N) -> 1 -> 1*factorial(0) -> 2*factorial(1) -> 3*factorial (2) -> -> 3*factorial (N-1)

En la resolucin de algoritmos recursivos es imprescindible encontrar estos dos elementos. 1.4. Tipos de recursin 1.4.1. Recursividad simple Aquella en cuya definicin slo aparece una llamada recursiva. Se puede transformar con facilidad

en algoritmos iterativos. 1.4.2. Recursividad mltiple Se da cuando hay ms de una llamada a s misma dentro del cuerpo de la funcin, resultando ms difcil de hacer de forma iterativa. Un ejemplo tpico es la funcin de fibonacci 1.4.3. Recursividad anidada En algunos de los argumentos de la llamada recursiva hay una nueva llamada a s misma. La funcin de Ackermann se define por recursividad como sigue: 1.4.4. Recursividad cruzada o indirecta Son algoritmos donde una funcin provoca una llamada a s misma de forma indirecta, a travs de otras funciones.

OHK

ltima modificacin: 15 Marzo 2011, 23:52 por ohk Y es que a veces pienso, que si no estubiera loco, no podra salir adelante. ANTES ESTE FORO MOLABA. ohk Desconectado Mensajes: 1.603 Re: Ejercicios Revursivos en Java y sus Soluciones Respuesta #1 en: 11 Octubre 2008, 03:47 Alguien se anima a resolver el ejercicio 14 ? OHK

En lnea

Yo lo que quiero que me salga bien es la vida.

ltima modificacin: 12 Octubre 2008, 05:53 por ohk Y es que a veces pienso, que si no estubiera loco, no podra salir adelante. ANTES ESTE FORO MOLABA.

En lnea

Amerikano|Cls Desconectado Mensajes: 785

Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #2 en: 13 Noviembre 2008, 02:17 lo intentare hacer pero necesito tiempo, por que ando ocupado. amerikano En lnea


Mi blog: http://amerikanocls.blogspot.com

[Beyond This Life]

Amerikano|Cls Desconectado Mensajes: 785

Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #3 en: 27 Noviembre 2008, 22:30 Oye una recomendacin, el de fibonnaci no es conveniente hacerlo por recursividad, por lo siguiente, y es que las llamadas recursivas se dividen en dos lo cual conlleva a repetir un mismo proceso mas de dos veces y eso le resta velocidad y eficiencia salu2 era solo eso jeje.

En lnea

[Beyond This Life] Mi blog: http://amerikanocls.blogspot.com Amerikano|Cls Re: Ejercicios Recursivos en Java y sus Soluciones

Respuesta #4 en: 4 Diciembre 2008, 18:38 Desconectado Mensajes: 785


Planteamiento: Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz: 1 1 1 1 1 1 2 2 2 2 1 2 4 4 4 1 2 4 8 8 1 2 4 8 16

Cita de: ohk en 11 Octubre 2008, 03:19

Solucin: Cdigo

1. No solucionado...

[Beyond This Life]

Bueno yo ya solucione el numero 14 jeje estaba facilito solo que no tenia tiempo de hacerlo, aca va: Cdigo 1. public class MatrizRecursividad { 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. if(j > matriz.length -1){ //Si lleg a la ultima coluna, reseteamos los datos para la public static void llenarMatriz(int matriz[][], int i, int j){ } llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo imprimir(); //imprimimos la matriz public static void main(String[] args) { private static int a=0, aux=1, b=0; //Declaramos los datos necesarios private static int[][] matriz = new int[6][6]; //La matriz debe ser cuadrada

siguiente 16. 17. 18. 19. 20. 21. 22. if(i==(aux-1) && j >= (aux-1)){ //comprueba que estemos en el lugar adecuado, es decir ira imprimiento escaladamente 23. 24. matriz[i][j]=aux; 25. 26. else matriz[i][j] = matriz[i][i-1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2 27. j+1); 28. 29. 30. 31. j+1; 32. 33. fila anterior (i-1) 34. j+1); 35. 36. 37. 38. 39. 40. 41. 42. j++){ for(int i=0; i< matriz.length; i++){ for(int j=0; j< matriz.length; public static void imprimir(){ //este metodo nos imprime la matriz por consola } } } llenarMatriz(matriz, i, else matriz[i][j] = matriz[i-1][j];// asignamos el mismo numero de la } else{ //si no, asignamos los valores anteriores de la escala if(j==0)// comprobamos si es el primer digito a ingresar matriz[i][j] = llenarMatriz(matriz, i , if(i==0)// si es la primera fila ingresamos aux=1 matriz[i][j] = } if(i <matriz.length){ // compara que no hallamos llegado al final i++; j=0; aux++;

43. System.out.print(matriz[i][j] + " "); 44. 45. 46. 47. 48. 49. } 50. } } } System.out.print("\n");

Bueno cualquier duda comenten que pa eso estoy salu2 amerikano

En lnea

Mi blog: http://amerikanocls.blogspot.com ohk Desconectado Mensajes: 1.603 Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #5 en: 4 Diciembre 2008, 20:19 @AmeRiK@nO, tu ejercicio corre perfectamente, y el codigo no es dificil de interpretar, porque haces codigo limpio. Ahora mismo lo agrego tu ejercicio a el espacio que falta. Gracias por el aporte Un saludo

Yo lo que quiero que me salga bien es la vida.

En lnea Y es que a veces pienso, que si no estubiera loco, no podra salir adelante. ANTES ESTE FORO MOLABA.

Amerikano|Cls

Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #6 en: 5 Diciembre 2008, 01:49

Desconectado Mensajes: 785

jeje debes corregir esto: Cdigo 1. if(i==0)// si es la primera fila ingresamos aux=1 2. matriz[i][j] = matriz[i][j]=aux;

Vez, lo puse dos veces sin querer, ahora pon solo uno: Cdigo 1. if(i==0)// si es la primera fila ingresamos aux=1 2. matriz[i][j] =aux;

Se me col uno sin darme cuenta solo era eso. [Beyond This Life] salu2

, pero as y todo funcion

En lnea

Mi blog: http://amerikanocls.blogspot.com ohk Desconectado Mensajes: 1.603 Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #7 en: 5 Diciembre 2008, 03:18 Cita de: AmeRiK@nO en 5 Diciembre 2008, 01:49
jeje debes corregir esto: Cdigo

1. if(i==0)// si es la primera fila ingresamos aux=1 2. matriz[i][j] = matriz[i][j]=aux; Yo lo que quiero que me salga bien es la vida.

Vez, lo puse dos veces sin querer, ahora pon solo uno: Cdigo

1. if(i==0)// si es la primera fila ingresamos aux=1

2. matriz[i][j] =aux;

Se me col uno sin darme cuenta eso. salu2

, pero as y todo funcion

, solo era

Da igual, ademas quien lo use se dara cuenta En lnea Y es que a veces pienso, que si no estubiera loco, no podra salir adelante. ANTES ESTE FORO MOLABA. juancho77 Desconectad o Mensajes: 455 Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #8 en: 7 Diciembre 2008, 01:35 De todos modos no tiene error, ni sintactico ni semantico.

En lnea think nonlinearly

rie con demencia

pixzeto Desconectado Mensajes: 1

Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #9 en: 11 Junio 2009, 02:03 Estuve practicando con estos ejercicios y parece que el mtodo para invertir un nmero no funciona bien. Por ejemplo, si le entregamos el 32, dara: 2 + invertir(3)*10 = 2 + 3*10 = 32 Cdigo: int invertir (int n) { if (n < 10) //caso base return n; else return (n % 10) + invertir (n / 10) * 10; }

Pero lo hice as y funciona: Cdigo: public int invertirNumero(int numero){ if(numero<10){ return numero; }else{ int contador = 0; int aux = numero; while(aux/10!=0){ contador++; aux = aux/10; } return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10); } } En lnea Amerikano|Cls Desconectado Mensajes: 785 Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #10 en: 11 Junio 2009, 02:18 Aqui agrego unos mios: - Determinar si una palabra es Palndroma: Cdigo 1. public boolean palindroma(String palabra, int i, int j){ 2. 3. 4. 5. 6. 7. 8. 9. 10. } [Beyond This Life] - Sumar el borde de una matriz de enteros: Cdigo 1. public int sumaBorde(int i, int j){ 2. 3. if(i >matriz.length-1) } return true; else return false; if(i != (palabra.length()/2)){ if(palabra.charAt(i) == palabra.charAt(j)) return palindroma(palabra, ++i, --j);

4. 5. 6. 7. 8. 9. 10. 11. 12.

return 0; else{ if(j > matriz.length-1 ){ j=0; i++; return sumaBorde(i,j); }else{ if((i==0) || (i==matriz.length -1) || (j==0) ||(j==matriz.length -1)) return matriz[i][j] + sumaBorde(i,j+1); } } return sumaBorde(i,j+1);

13. 14. 15. 16. }

Salu2 En lnea

Mi blog: http://amerikanocls.blogspot.com djrocha Desconectado Mensajes: 1 Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #11 en: 7 Julio 2009, 19:48 Buenas tardes: Me gustara conocer el cdigo de estos ejercicios implementndolo en ambiente grfico. Gracias. En lnea VonN Desconectado Mensajes: 151 Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #12 en: 7 Julio 2009, 20:08 Es lo mismo. Son algoritmos, as que puedes implementarlos como funcin, y luego pasarle los parmetros correspondientes desde tus objetos. Un saludo

En lnea

Se toma por necios a aquellos que dicen lo que todos pesamos

Learnin' Python&C++

saintmauricioxd Desconectado Mensajes: 1

Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #13 en: 20 Abril 2010, 18:44 Cita de: pixzeto en 11 Junio 2009, 02:03
Estuve practicando con estos ejercicios y parece que el mtodo para invertir un nmero no funciona bien. Por ejemplo, si le entregamos el 32, dara: 2 + invertir(3)*10 = 2 + 3*10 = 32 Cdigo:

int invertir (int n) if (n < 10) //caso base return n; else return (n % 10) + invertir (n / 10) * 10;

}
Pero lo hice as y funciona: Cdigo:

public int invertirNumero(int numero){ if(numero<10){ return numero; }else{ int contador = 0; int aux = numero; while(aux/10!=0){ contador++; aux = aux/10; } return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10); } } Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento En lnea

cibercito Desconectado Mensajes: 1

Re: Ejercicios Recursivos en Java y sus Soluciones Respuesta #14 en: 18 Junio 2010, 06:27 Cita de: saintmauricioxd en 20 Abril 2010, 18:44
Cita de: pixzeto en 11 Junio 2009, 02:03 Estuve practicando con estos ejercicios y parece que el mtodo para invertir un nmero no funciona bien. Por ejemplo, si le entregamos el 32, dara: 2 + invertir(3)*10 = 2 + 3*10 = 32 Cdigo:

int invertir (int n) if (n < 10) //caso base return n; else return (n % 10) + invertir (n / 10) * 10;

}
Pero lo hice as y funciona: Cdigo:

public int invertirNumero(int numero){ if(numero<10){ return numero; }else{ int contador = 0; int aux = numero; while(aux/10!=0){ contador++; aux = aux/10; } return (int)(Math.pow(10, contador))*(numero%10) + this.invertirNumero(numero/10); } }
Tu algoritmo no es recursivo, recordemos que la recursividad es una alternativa a la iteracion (los bucles for, while no deben usarse al implementar recursividad) pero vale el intento

Me gustaria una aclaracion sobre recursividad ,ya que sin ella discrepo contigo , porque considero que ese algoritmo si es recursivo por aplicarse el tambien cierto concepto de :" La recursividad simplemente significa aplicar una funcin como parte de la definicin de esa misma funcin. " . (yo lo entiendo como , si una funcion se llama dentro de su misma funcion = recursividad ) Entonces quisiera saber : si una funcion tiene n bucles PERO SE HACE RECURSIVIDAD (osea el concepto que yo manejo) , el algoritmo es recursivo o deja de serlo por tener n bucles ?.

Programacin en Java Funciones recursivas


Programacin en Java/Funciones recursivas

Clusula return

Funciones recursivas

Las funciones recursivas son aquellas que se invocan a si mismas en algn momento de su ejecucin. En anlisis de Algoritmos las tcnicas recursivas se usan mucho para la solucin de Problemas. Esta forma en analisis de Algoritmos es llamada Divide y Venceras. Para poder resolver un problema de forma recursiva es necesario saber alguna solucion no recursiva para alguno de los casos mas sencillos. "Usamos la solucion mas simple para resolver un problema mas complejo." As, todo mtodo recursivo debe tener al menos una sentencia que devuelva un resultado (la solucin del caso ms sencillo) y las sentencias necesarias para acercarse en cada invocacin a ese caso. La recursin permite programar algoritmos aparentemente complicados con un cdigo simple y claro, ahorrando trabajo al programador. A simple vista parece la solucin perfecta para muchos problemas, pero hay que tener en cuenta que en ocasiones ralentizar el programa en exceso. Por ejemplo, la funcin factorial en forma recursiva:

public class Factoriales { static int factorial(int numero){ if ( numero <= 1 ) { return 1; } else { return numero*factorial(numero-1); } } public static void main(String args[]){ System.out.println(factorial(5)); } }

La misma funcin en forma iterativa:

public class Factoriales{ static int factorial(int numero){ int resultado = 1; while(numero > 0){ resultado = resultado*numero;

nmero--; } } public static void main(String args[]){ System.out.println(factorial(5)); } }

Como puede observarse, la funcin iterativa slo recorre un bucle while, mientras que la recursiva invoca un mtodo nuevo hasta que nmero vale 1 (Esto requiere un trabajo considerablemente mayor por parte del ordenador). La recursin es por lo tanto una potente herramienta en programacin, pero hay que saber diferenciar cuando es til y cuando no.

[editar]Recursin

mutua

Este en un ejemplo de recursin mutua. Se trata de un programa que devolver true o false si el parmetro nmero es respectivamente, impar o par (en el caso de que invoquemos la funcin impar(nmero)).

public class Paridad{ public static boolean impar (int numero){ if (numero==0) return false; else return par(numero-1); } public static boolean par (int numero){ if (numero==0) return true; else return impar(numero-1); } } O
INICIO NOSOTROS MISION

O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O

VISION COLABORADORES GALERIA

TALLERES BIENVENIDA

JAVA J2SE J2EE

J2ME FRAMEWORKS JAVA PROGRAMACIN WEB HTML HTML 5 CSS CSS 3 FRAMEWORKS CSS

JAVA WEB JAVA WEB SERVICES

PHP PHP FRAMEWORKS PROGRAMACION C# ASP.NET C# C++ VB ASP.NET VB DEVEXPRESS DEV ASP.NET C# DEV ASP.NET VB BASE DE DATOS SQL SERVER 2005 SQL SERVER 2008 SQL SERVER 2012 MYSQL ORACLE MOVILES ANDROID WINDOWS PHONE TALLERES FORO FORO INICIAR SESIN MI PERFIL DIRECTORIO BANDEJA DE ENTRADA ACTIVIDAD MI CUENTA REGISTRAR CHAT

BLUEPRINT GRID SYSTEM 960 ZEND FRAMEWORK

PUBLICADO POR JUAN CARLOS 3 COMENTARIOS

1. un programa para calcular el factorial de un nmero

1 2 3 4

import java.util.Scanner; class Ejercicio{ public static int factorial(int n)

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

{ if(n==0) return 1; else return n*factorial(n-1); } public static void main(String args[]) { Scanner in =new Scanner(System.in); int num; do{ System.out.print("Ingrese numero :"); num=in.nextInt(); }while(num<=0); System.out.println("El factorial es : "+factorial(num)); } }

2. Calcular la potencia de x elevado a la n en forma recursiva. x real y n entero positivo.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1

import java.util.Scanner; class Ejercicio{ public static double potencia(double x, double n) { if(n==0) return 1; else return x*potencia(x,n-1); } public static void main(String args[]) { Scanner in = new Scanner(System.in); int n; double x; System.out.print("Valor de x :"); x= in.nextDouble(); do{ System.out.print("valor de n : "); n=in.nextInt(); }while(n<=0); System.out.println(x+" elevado a la "+n+ " es igual a "+potencia(x,n)); } }

3. Hacer un programa para que reporte los n trminos de la serie de Fibonacci


import java.util.Scanner;

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

class Ejercicio{ public static int fibonacci(int n) { if(n==1) return 1; else if(n==2) return 1; else return fibonacci(n-1) + fibonacci(n-2); } public static void main(String args[]) { Scanner in = new Scanner(System.in); int n,i ; do{ System.out.print("Nmero de terminos de la serie : "); n=in.nextInt(); }while(n<=0); for(i=1;i<=n;i++) System.out.print(fibonacci(i) + " "); System.out.println(); } }

4. Programa para calcular el mximo comn divisor de dos nmeros.


import java.util.Scanner; class Ejercicio{ public static int mcd(int a,int b) { if(a%b==0) return b; else return mcd(b,a%b); } public static void main(String args[]) { Scanner in = new Scanner(System.in); int x,y; do{ System.out.print("Ingrese primer numero :"); x=in.nextInt(); }while(x<=0); do{ System.out.print("Ingrese segundo numero :"); y=in.nextInt(); }while(y<=0); System.out.println("El mcd de "+x+" y "+y+" es : "+mcd(x,y));

20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1 2 3 4 5 6 7 8 9 10 11 12 13 14

} }

5. Programa para reportar un numero al revs


import java.util.*; class Ejercicio{ public static void reves(int n) { System.out.print(n % 10); if( n/10!=0 ) reves(n/10); } public static void main(String args[]) { Scanner sc = new Scanner(System.in); int num; do{ System.out.print("Ingrese numero :"); num=sc.nextInt(); }while(num<=0); System.out.print("Numero al reves :"); reves(num); System.out.println(); } }

6. Programa para convertir un numero de base 10 a base b (entre 2 y 9)


import java.util.*; class Ejercicio{ public static void conversionBase(int n, int b) { if(n<b) System.out.print(n); else { conversionBase(n/b,b); System.out.print(n%b); } } public static void main(String args[]) {

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

Scanner sc = new Scanner(System.in); int num,b; do{ System.out.print("Ingrese numero :"); num=sc.nextInt(); }while(num<=0); do{ System.out.print("Base a la que quiere convertir : "); b=sc.nextInt(); }while(b<2 || b>9); System.out.print("El numero "+num+" en base "+b+" es : "); conversionBase(num,b); System.out.println(); } }

Autor: juan carlos Publicado el 9 abril, 2012.Publicado el 23 abril, 2012.