Planteamiento del Ejercicio acompañado del algoritmo de resolución en Jav1

Post on 13-Apr-2015

179 views 11 download

Transcript of Planteamiento del Ejercicio acompañado del algoritmo de resolución en Jav1

Planteamiento del Ejercicio acompañado del algoritmo de resolución en Java

Planteamiento:

Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un número.

Solución:

Código

1.    int factorial(int n){

2.      if(n==0) return 1;   //AXIOMA

3.      else return n*factorial(n-1);  //FORMULA RECURSIVA

4.   }

Planteamiento:

Ejercicio 2. Programar un algoritmo recursivo que calcule un número de la serie fibonacci.

Solución:

Código

1.    int fibonaci(int n){

2.      if(n==1 || n==2) return 1;

3.      else return fibonaci(n-1)+fibonaci(n-2);

4.    }

Planteamiento:

Ejercicio 3. Programar un algoritmo recursivo que permita hacer la división por restas sucesivas.

Solución:

Código

1.    int division (int a, int b)

2.    {

3. if(b > a) return 0;

4. else

5.    return division(a-b, b) + 1;

6.    }

7.

Planteamiento:

Ejercicio 4. Programar un algoritmo recursivo que permita invertir un número. Ejemplo: Entrada: 123 Salida: 321

Solución:

Código

1.     int invertir (int n)

2.    {

3. if (n < 10)         //caso base

4.    return n;

5. else

6.    return (n % 10) + invertir (n / 10) * 10;

7.    }

Planteamiento:

Ejercicio 5. Programar un algoritmo recursivo que permita sumar los dígitos de un número. Ejemplo: Entrada: 123 Resultado:6

Solución:

Código

1.     int sumar_dig (int n)

2.    {

3. if (n == 0)      //caso base

4.    return n;

5. else

6.    return sumar_dig (n / 10) + (n % 10);

7.    }

Planteamiento:

Ejercicio 6. Programar un algoritmo recursivo que permita hacer una multiplicación, utilizando el método Ruso. Para mas informacion: aqui.

Solución:

Código

1.     int mult_rusa(int A, int B)

2.    {

3.        if(A==1){

4.    return (B);

5. }

6. if(A%2!=0){

7. return(B+mult_rusa( A/2 , B*2));

8. }

9. else{

10. return(mult_rusa( A/2 , B*2));

11. }

12.    }

Planteamiento:

Ejercicio 7. Programar un algoritmo recursivo que permita sumar los elementos de un vector.

Solución:

Código

1.     int suma_vec(int v [], int n)

2.    {

3. if (n == 0)

4.    return v [n];

5. else

6.    return suma_vec(v, n - 1) + v [n];

7.    }

Planteamiento:

Ejercicio 8. Programar un algoritmo recursivo que permita multiplicar los elementos de un vector.

Solución:

Código

1.     int multiplicar (int vec [], int tam)

2.    {

3. if (tam == 0)

4.    return (vec [0]);

5. return (vec [tam] * multiplicar (vec, tam - 1));

6.    }

Planteamiento:

Ejercicio 9. Programar un algoritmo recursivo que calcule el Maximo comun divisor de dos números.

Solución:

Código

1.    int sacar_mcd(int a, int b) {

2.        if(b==0)

3.            return a;

4.        else

5.            return sacar_mcd(b, a % b);

6.    }

7.

Planteamiento:

Ejercicio 10. Programar un algoritmo recursivo que determine si un número es positivo.

Solución:

Código

1.   public boolean positivo(int n){

2.     if(n>0) return true;

3.     else return negativo(n);

4.    }

5.

6.    public boolean negativo(int n){

7.     if(n<0) return false;

8.     else return  positivo(n);

9.    }

Planteamiento:

Ejercicio 11. Programar un algoritmo recursivo que determine si un número es impar utilizando recursividad cruzada.

Solución:

Código

1.        public boolean par(int n){

2. if(n==0) return true;

3. else return impar(n-1);

4. }

5.

6. public boolean impar(int n){

7. if(n==0) return false;

8. else return par(n-1);

9. }

Planteamiento:

Ejercicio 12. Programar un algoritmo recursivo que permita sumar los elementos de una matriz.

Solución:

Código

1.     int suma (int fila, int col, int orden, int mat [] [])

2.    {

3. if (fila == 0 && col == 0)

4.    return mat [0] [0];

5. else

6.    if (col < 0)

7. return suma (fila - 1, orden, orden, mat);

8.    else

9. return mat [fila] [col] + suma (fila, col - 1, orden, mat);

10.    }

Planteamiento:

Ejercicio 13. Programar un algoritmo recursivo que permita resolver el cuadro latino. Ejemplo de cuadro latino:

0 0 0 0 10 0 0 1 20 0 1 2 30 1 2 3 41 2 3 4 5

Solución:

Código

1.     latino (int fila, int col, int cont, int orden, int mat [] [])

2.    {

3. if (fila == 0 && col == 0)

4.    mat [0] [0] = 1;

5. else

6.    if (fila == col)

7. latino (fila - 1, orden - 1, orden, orden, mat);

8.    else

9.    {

10. mat [fila] [col] = cont;

11. latino (fila, col - 1, orden + 1, orden, mat);

12.    }

13.    }

Planteamiento:

Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz:

1 1 1 1 11 2 2 2 21 2 4 4 41 2 4 8 81 2 4 8 16

Solución: Solucionado por: AmeRiK@nO

Código

1. public class MatrizRecursividad {

2.

3. private static int a=0, aux=1, b=0; //Declaramos los datos necesarios

4. private static int[][] matriz = new int[6][6]; //La matriz debe ser

cuadrada

5.

6. public static void main(String[] args) {

7.

8. llenarMatriz(matriz, a, b); //Iniciamos el llamado recursivo

9. imprimir(); //imprimimos la matriz

10.

11. }

12.

13. public static void llenarMatriz(int matriz[][], int i, int j){

14.

15. if(j > matriz.length -1){ //Si llegó a la ultima coluna,

reseteamos los datos para la siguiente

16. i++;

17. j=0;

18. aux++;

19. }

20. if(i <matriz.length){ // compara que no hallamos llegado al

final

21.

22. if(i==(aux-1) && j >= (aux-1)){ //comprueba que

estemos en el lugar adecuado, es decir ira imprimiento escaladamente

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

aux=1

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

25. else

26. matriz[i][j] = matriz[i][i-

1]*2;//ingresamos el valor correspondiente al ultimo de la "escala" *2

27. llenarMatriz(matriz, i , j+1);

28. }

29. else{ //si no, asignamos los valores anteriores de la

escala

30. if(j==0)// comprobamos si es el primer digito

a ingresar

31. matriz[i][j] = j+1;

32. else

33. matriz[i][j] = matriz[i-1][j];//

asignamos el mismo numero de la fila anterior (i-1)

34. llenarMatriz(matriz, i, j+1);

35. }

36. }

37. }

38.

39. public static void imprimir(){ //este metodo nos imprime la matriz por

consola

40.

41. for(int i=0; i< matriz.length; i++){

42. for(int j=0; j< matriz.length; j++){

43. System.out.print(matriz[i][j] + " ");

44. }

45. System.out.print("\n");

46. }

47. }

48.

49. }

Planteamiento:

Ejercicio 15. Programar un algoritmo recursivo que ejecute la matriz del cubo mágico.

Solución:

Código

1.    void magico(int mat [] [], int fil, int colmedio, int c, int n)

2.    {

3. if (c == n * n)

4. {

5.    mat [n-1] [colmedio] = c;

6. }

7. else

8. {

9.    if (fil < 0 && colmedio == n)

10.    {

11. magico(mat, fil + 2, n - 1, c, n);

12.    }

13.    else

14.    {

15. if (fil < 0)

16. {

17.    magico(mat, n - 1, colmedio, c, n);

18. }

19. else

20. {

21.    if (colmedio == n)

22.    {

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

24.    }

25.    else

26.    {

27. if (mat [fil] [colmedio] == 0)

28. {

29.    mat [fil] [colmedio] = c;

30.    magico(mat, fil - 1, colmedio + 1, c + 1, n);

31. }

32. else

33. {

34.    magico(mat, fil + 2, colmedio - 1, c, n);

35. }

36.    }

37. }

38.    }

39.

40. }

41.    }

Planteamiento:

Ejercicio 16. Programar un algoritmo recursivo que muestre el numero menor de un vector.

Solución:

Código

1.        int menorvec (int x [], int n, int menor) {

2.        if (n == 0)

3.            if (menor > x [n]) return x [0];

4.            else return menor;

5.        else

6.            if (menor > x [n]) return menorvec (x, n - 1, x [n]);

7.            else return menorvec (x, n - 1, menor); }

Planteamiento:

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

Solución:

Código

1.        int mayor (int numeros [], int posicion) {

2.        int aux;

3.        if (posicion == 0) return numeros [posicion];

4.        else {

5.            aux = mayor (numeros, posicion - 1);

6.            if (numeros [posicion] > aux) return numeros [posicion];

7.            else return mayor (numeros, posicion - 1);

8.         }

9.        }

Citar

Recursividad1.1. Introducción.

El concepto de recursividad va ligado al de repetición. Son recursivos aquellos algoritmos que, estando encapsulados dentro de una función, son llamados desde ella misma una y otra vez, en contraposición a los algoritmos iterativos, que hacen uso de bucles while, do-while, for, etc.

1.2. Definición.

Algo es recursivo si se define en términos de sí mismo (cuando para definirse hace mención a sí mismo). Para que una definición recursiva sea válida, la referencia a sí misma debe ser relativamente más sencilla que el caso considerado.1.3. Elementos de la Recursión 

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 continuación indefinida de las partes recursivas.

1.3.2. Formula recursiva

Relaciona el resultado del algoritmo con resultados de casos más simples. Se hacen nuevas llamadas a la función, pero están más próximas al caso base.Por ejemplo: El factorial de un número

factorial(0)   ->  1factorial(1)   ->  1*factorial(0)factorial(2)   ->  2*factorial(1)factorial(3)   ->  3*factorial (2)…               ->  …factorial(N)   ->  3*factorial (N-1)

En la resolución de algoritmos recursivos es imprescindible encontrar estos dos elementos.

1.4. Tipos de recursión

1.4.1. Recursividad simple

Aquella en cuya definición sólo aparece una llamada recursiva. Se puede transformar con facilidad en algoritmos iterativos.

1.4.2. Recursividad múltipleSe da cuando hay más de una llamada a sí misma dentro del cuerpo de la función, resultando más difícil de hacer de forma iterativa. Un ejemplo típico es la función de fibonacci 1.4.3. Recursividad anidada

En algunos de los argumentos de la llamada recursiva hay una nueva llamada a sí misma. La función de Ackermann se define por recursividad como sigue:

1.4.4. Recursividad cruzada o indirectaSon algoritmos donde una función provoca una llamada a sí misma de forma indirecta, a través de otras funciones.

OHK

« Última modificación: 15 Marzo 2011, 23:52 por ohk »  En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.

ANTES ESTE FORO MOLABA.

ohk

 Desconectado

Mensajes: 1.603

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

 

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

« Última modificación: 12 Octubre 2008, 05:53 por ohk »  En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.

ANTES ESTE FORO MOLABA.

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 línea

アメリカノ

Mi blog:

http://amerikanocls.blogspot.com

Amerikano|Cls

 Desconectado

Mensajes: 785

[Beyond This Life]

 

Re: Ejercicios Recursivos en Java y sus Soluciones« Respuesta #3 en: 27 Noviembre 2008, 22:30 »

Oye una recomendación, 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    era solo eso jeje.

salu2

 En línea

アメリカノ

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

Amerikano|Cls

 Desconectado

Mensajes: 785

[Beyond This Life]

 

Re: Ejercicios Recursivos en Java y sus Soluciones« Respuesta #4 en: 4 Diciembre 2008, 18:38 »

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

Planteamiento:

Ejercicio 14. Programar un algoritmo recursivo que permita resolver la siguiente matriz:

1 1 1 1 11 2 2 2 21 2 4 4 41 2 4 8 81 2 4 8 16

Solución:

Código

1. No solucionado...

Bueno yo ya solucione el numero 14 jeje estaba facilito solo que no tenia tiempo de hacerlo, aca va:

Código

1. public class MatrizRecursividad {

2.

3. private static int a=0, aux=1, b=0; //Declaramos

los datos necesarios

4. private static int[][] matriz = new int[6][6];

//La matriz debe ser cuadrada

5.

6. public static void main(String[] args) {

7.

8. llenarMatriz(matriz, a, b); //Iniciamos el

llamado recursivo

9. imprimir(); //imprimimos la matriz

10.

11. }

12.

13. public static void llenarMatriz(int matriz[][],

int i, int j){

14.

15. if(j > matriz.length -1){ //Si llegó a la

ultima coluna, reseteamos los datos para la

siguiente

16. i++;

17. j=0;

18. aux++;

19. }

20. if(i <matriz.length){ // compara que no

hallamos llegado al final

21.

22. if(i==(aux-1) && j >= (aux-1)){

//comprueba que estemos en el lugar adecuado, es

decir ira imprimiento escaladamente

23. if(i==0)// si es la

primera fila ingresamos aux=1

24. matriz[i][j] =

matriz[i][j]=aux;

25. else

26. matriz[i][j] =

matriz[i][i-1]*2;//ingresamos el valor

correspondiente al ultimo de la "escala" *2

27. llenarMatriz(matriz, i ,

j+1);

28. }

29. else{ //si no, asignamos los

valores anteriores de la escala

30. if(j==0)// comprobamos si

es el primer digito a ingresar

31. matriz[i][j] =

j+1;

32. else

33. matriz[i][j] =

matriz[i-1][j];// asignamos el mismo numero de la

fila anterior (i-1)

34. llenarMatriz(matriz, i,

j+1);

35. }

36. }

37. }

38.

39. public static void imprimir(){ //este metodo nos

imprime la matriz por consola

40.

41. for(int i=0; i< matriz.length; i++){

42. for(int j=0; j< matriz.length; j+

+){

43.

System.out.print(matriz[i][j] + " ");

44. }

45. System.out.print("\n");

46. }

47. }

48.

49. }

50.

Bueno cualquier duda comenten que pa eso estoy   .

salu2

amerikano

 En línea

アメリカノ

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

ohk

 Desconectado

Mensajes: 1.603

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

 

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 aporteUn saludo

 En línea

Y es que a veces pienso, que si no estubiera loco, no podría 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

[Beyond This Life]

 

jeje debes corregir esto:

Código

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:

Código

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

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

Se me coló uno sin darme cuenta   , pero así y todo funcionó   , solo era eso.

salu2

 En línea

アメリカノ

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

ohk

 Desconectado

Mensajes: 1.603

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

 

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:

Código

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:

Código

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

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

Se me coló uno sin darme cuenta   , pero así y todo funcionó   , solo era eso.

salu2

 

Da igual, ademas quien lo use se dara cuenta  

 En línea

Y es que a veces pienso, que si no estubiera loco, no podría salir adelante.

ANTES ESTE FORO MOLABA.

juancho77

 Desconectad

o

Mensajes: 455

rie con demencia

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 línea

think nonlinearly

pixzeto

 Desconectad

o

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 método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría: 2 + invertir(3)*10  =  2 + 3*10  =  32

Código:     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:Código: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 línea

Amerikano|Cls

 Desconectado

Mensajes: 785

[Beyond This Life]

 

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 Palíndroma:

Código

1. public boolean palindroma(String palabra, int i, int

j){

2.

3.     if(i != (palabra.length()/2)){

4.         if(palabra.charAt(i) == palabra.charAt(j))

5.             return palindroma(palabra, ++i, --j);

6.         else

7.             return false;

8.     }

9.      return true;

10. }

- Sumar el borde de una matriz de enteros:

Código

1. public int sumaBorde(int i, int j){

2.

3.     if(i >matriz.length-1)

4.         return 0;

5.     else{

6.         if(j > matriz.length-1 ){

7.             j=0;

8.             i++;

9.             return sumaBorde(i,j);

10.         }else{

11.             if((i==0) || (i==matriz.length -1) ||

(j==0) ||(j==matriz.length -1))

12.                 return matriz[i][j] +

sumaBorde(i,j+1);

13.         }

14.     }

15.     return sumaBorde(i,j+1);

16. }

Salu2

 En línea

アメリカノ

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

djrocha

 Desconectad

o

Mensajes: 1

Re: Ejercicios Recursivos en Java y sus Soluciones« Respuesta #11 en: 7 Julio 2009, 19:48 »

Buenas tardes:

Me gustaría conocer el código de estos ejercicios implementándolo en ambiente gráfico. Gracias.

 En línea

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 función, y luego pasarle los parámetros correspondientes desde tus objetos.

Un saludo

 En línea

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

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:03Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría: 2 + invertir(3)*10  =  2 + 3*10  =  32

Código:     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:Código: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 línea

cibercito

 Desconectad

o

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:44Cita de: pixzeto en 11 Junio 2009, 02:03Estuve practicando con estos ejercicios y parece que el método para invertir un número no funciona bien.

Por ejemplo, si le entregamos el 32, daría: 2 + invertir(3)*10  =  2 + 3*10  =  32

Código:     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:Código: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 función como parte de la definición de esa misma función. " . (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 ?.

Programación en Java Funciones recursivasProgramación en Java/Funciones recursivas

← Cláusula return Funciones recursivas

Las funciones recursivas son aquellas que se invocan a si mismas en algún momento de su ejecución.

En análisis de Algoritmos las técnicas recursivas se usan mucho para la solución 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 método recursivo debe tener al menos una sentencia que devuelva un resultado (la solución

del caso más sencillo) y las sentencias necesarias para acercarse en cada invocación a ese caso.

La recursión permite programar algoritmos aparentemente complicados con un código simple y claro,

ahorrando trabajo al programador. A simple vista parece la solución perfecta para muchos problemas,

pero hay que tener en cuenta que en ocasiones ralentizará el programa en exceso. Por ejemplo, la

función 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 función en forma iterativa:

public class Factoriales{

static int factorial(int numero){

int resultado = 1;

while(numero > 0){

resultado = resultado*numero;

número--;

}

}

public static void main(String args[]){

System.out.println(factorial(5));

}

}

Como puede observarse, la función iterativa sólo recorre un bucle while, mientras que la recursiva

invoca un método nuevo hasta que número vale 1 (Esto requiere un trabajo considerablemente mayor

por parte del ordenador).

La recursión es por lo tanto una potente herramienta en programación, pero hay que saber diferenciar

cuando es útil y cuando no.

[editar]Recursión mutua

Este en un ejemplo de recursión mutua. Se trata de un programa que devolverá true o false si el

parámetro número es respectivamente, impar o par (en el caso de que invoquemos la función

impar(número)).

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);

}

}

INICIO NOSOTROS

O MISION O VISION O COLABORADORES O GALERIA

TALLERES BIENVENIDA

JAVA O J2SE O J2EE

JAVA WEB JAVA WEB SERVICES

O J2ME O FRAMEWORKS JAVA PROGRAMACIÓN WEB O HTML O HTML 5 O CSS O CSS 3 O FRAMEWORKS CSS

BLUEPRINT GRID SYSTEM 960

O PHP O PHP FRAMEWORKS

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

PUBLICADO POR JUAN CARLOS 3 COMENTARIOS

1. un programa para calcular el factorial de un número12

import java.util.Scanner;

3456789101112131415161718192021

class Ejercicio{

      public static int factorial(int n)      {        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.12345678910111213141516171819202122232425

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 términos de la serie de Fibonacci123456789101112131415161718192021222324252627

import java.util.Scanner;

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("Número 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 máximo común divisor de dos números.1234567891011121314151617

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();

1819202122232425

        }while(y<=0);        System.out.println("El mcd de "+x+" y "+y+" es : "+mcd(x,y));      }}

5. Programa para reportar un numero al revés123456789101112131415161718192021222324

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)123456789101112

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);         }      }

1314151617181920212223242526272829303132

      public static void main(String args[])      {        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.