martes, 8 de febrero de 2011

Ejemplos de Recursividad

  1. Planteamiento Ejercicio 1. Programar un algoritmo recursivo que calcule el factorial de un número.
    Solución:
    int factorial(int n){
    if(n==0){
    return 1; //Caso Base
    }
    else {
    return n * factorial(n-1); //Fórmula Recursiva
    }
    }

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

    int fibonaci(int n){
    if(n==1 || n==2) {
    return 1;
    }
    else{
    return fibonaci(n-1)+fibonaci(n-2);
    }
    }

  3. Planteamiento Ejercicio 3: Programar un algoritmo recursivo que permita hacer la división por restas sucesivas. ver mas...
    Solución:

    int division (int a, int b) {
    if(b > a) {
    return 0;
    }
    else {
    return division(a-b, b) + 1;
    }
    }

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

    int invertir (int n) {
    if (n < 10) { //caso base
    return n;
    }
    else {
    return (n % 10) + invertir (n / 10) * 10;
    }
    }
  5. Planteamiento Ejercicio 5: Programar un algoritmo recursivo que permita sumar los dígitos de un número.Ejemplo: Entrada:123 Resultado:6
    Solución:

    int sumar_dig (int n) {
    if (n == 0) { //caso base
    return n;
    }
    else {
    return sumar_dig (n / 10) + (n % 10);
    }
    }

  6. Planteamiento Ejercicio 6: Programar un algoritmo recursivo que permita hacer una multiplicación, utilizando el método Ruso. Para mas información: aquí.
    Solución:

    int mult_rusa(int A, int B) {
    if(A==1){
    return (B);
    }
    if(A%2!=0){
    return (B+mult_rusa( A/2 , B*2));
    }
    else{
    return(mult_rusa( A/2 , B*2));
    }
    }

  7. Planteamiento Ejercicio 7: Programar un algoritmo recursivo que permita sumar los elementos de un vector.
    Solución:

    int suma_vec(int v [], int n) {
    if (n == 0) {
    return v [n];
    }
    else {
    return suma_vec(v, n - 1) + v [n];
    }
    }

  8. Planteamiento Ejercicio 8: Programar un algoritmo recursivo que permita multiplicar los elementos de un vector.
    Solución:

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

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

    int sacar_mcd(int a, int b) {
    if(b==0) {
    return a;
    }
    else {
    return sacar_mcd(b, a % b);
    }
    }

  10. Planteamiento Ejercicio 10: Programar un algoritmo recursivo que determine si un número es positivo/negativo.
    Solución:

    public boolean positivo(int n){
    if(n<0) return true;
    else return negativo(n);
    }

    public boolean negativo(int n){
    if(n>0) return false;
    else return positivo(n);
    }
  11. Planteamiento Ejercicio 11: rogramar un algoritmo recursivo que determine si un número es impar utilizando recursividad cruzada.
    Solución:

    public boolean par(int n){
    if(n==0) {
    return true;
    }
    else {
    return impar(n-1);
    }
    }

    public boolean impar(int n){
    if(n==0) {
    return false;
    }
    else {
    return par(n-1);
    }
    }

  12. Planteamiento Ejercicio 12: Programar un algoritmo recursivo que permita sumar los elementos de una matriz.
    Solución:

    int suma (int fila, int col, int orden, int mat [] [])
    {
    if (fila == 0 && col == 0)
    return mat [0] [0];
    else
    if (col < 0)
    return suma (fila - 1, orden, orden, mat);
    else
    return mat [fila] [col] + suma (fila, col - 1, orden, mat);
    }
  13. Planteamiento Ejercicio 13: Programar un algoritmo recursivo que muestre el numero menor de un vector.
    Solución:

    int menorvec (int x [], int n, int menor) {
    if (n == 0) {
    if (menor > x [n]) {
    return x [0];
    }
    else {
    return menor;
    }
    }
    else{
    if (menor > x [n]) {
    return menorvec (x, n - 1, x [n]);
    }
    else {
    return menorvec (x, n - 1, menor);
    }
    }
    }

    int mayorvec (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);
    }
    }
    }


44 comentarios:

  1. Saludos por el blog con respecto a la recursividad del problema cuatro creo que te bota el mismo numero

    ResponderEliminar
  2. Realizar una función recursiva que cuente la cantidad de veces que un número A es
    divisible por otro número B y devuelva el resultado del conteo. (Ej.: el número 16 es
    divisible por 2 4 veces, así que la función debería devolver 4 de resultado).

    ResponderEliminar
  3. Respuestas
    1. #include

      int invertir(int n,int m){
      if(n==0){
      return m;
      }
      else{
      return invertir(n / 10, m * 10 + n % 10);
      }
      }

      int main(){

      printf("%d",invertir(,0));
      return 0;
      }

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. en tu algoritmo de mayorvec la recursividad tiene otro nombre.

    ResponderEliminar
  6. amigo me puedes ayudar con el de suma de numeros de un vector!

    ResponderEliminar
  7. Para el de numeros invertidos, le hice modificacion y ya hay solucion para n numeros.
    codigo:
    int invertir (int n) {
    int aux=n,cont=-1;
    float pot;
    while (aux>=1)//para n numeros enteros
    {
    aux=aux/10;
    cont=cont+1;
    }
    pot=pow(10,cont);
    if (n < 10) { //caso base
    return n;
    }
    else {
    return (n % 10)*pot + invertir (n / 10) ;
    }
    }

    ResponderEliminar
    Respuestas
    1. Amigo en recursividad no se usa el bucle while

      Eliminar
    2. Aqui les dejo el programa invertir un numero con recursividad.
      Public in invertir(int n) {
      int resultado;
      if(n<10){
      resultado=1;
      }else{
      resultado=invertir(n/10)+(n%10)*(int) Math.pow(10,Math.log10(n));
      }
      return resultado;
      }

      Eliminar
    3. Al inicio del código es
      public int invertir(int n)

      Eliminar
    4. Aqui les dejo el programa invertir un numero con recursividad.
      Public in invertir(int n) {
      int resultado;
      if(n<10){
      resultado=1;
      }else{
      resultado=invertir(n/10)+(n%10)*(int) Math.pow(10,Math.log10(n));
      }
      return resultado;
      }

      Eliminar
    5. Amigo en recursividad no se usa el bucle while

      Eliminar
    6. Amigo Yasmani no me funcionó tu método que invierte, tu solución está dirigida para solucionar cualquier número sin importar la cifra?

      Eliminar
    7. Aqui les dejo el programa invertir un numero con recursividad.
      public static int invierte(int n) {
      if (n < 10) {
      return n;
      } else {
      return (n % 10) * ((int) Math.pow(10, (int) Math.log10(n))) + invierte(n / 10);
      }
      }

      Eliminar
    8. Este comentario ha sido eliminado por el autor.

      Eliminar
    9. Este comentario ha sido eliminado por el autor.

      Eliminar
  8. Alquien que me explique el de sacar el MCD

    ResponderEliminar
  9. Amigo tienes el ejercicio 7 malo, este fue el que hice!
    public static int sumarvec (int v[], int cant) {
    cant--;
    if (cant < 0) {
    return 0;
    }
    else {
    return sumarvec(v, cant) + v[cant];

    }
    }

    Gracias por los ejercicios! He aprendido bastante..

    ResponderEliminar
  10. http://foro.elhacker.net/ejercicios/ejercicios_recursivos_en_java_y_sus_soluciones-t231013.0.html

    ResponderEliminar
  11. pero esas son funciones que pongo en el int main()??

    ResponderEliminar
  12. Ordenar de menor a mayor una cadena de numeros con recursividad, sin arreglos?

    ResponderEliminar
  13. como mando a imprimir el ejercicio 13

    ResponderEliminar
  14. Saber un número si es amigo recursivamente

    ResponderEliminar
  15. En la suma de la matriz a que te refieres con int orden?? ??

    ResponderEliminar
  16. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  17. Determinar si dos vectores vec1 y vec2, de N posiciones, son iguales, Ayuda porfavor

    ResponderEliminar
  18. Programar un algoritmo recursivo que permita resolver el cuadro latino.

    No entiendo como podría ser el código ahí, me podrías ayudar?

    ResponderEliminar
  19. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  20. Hola, necesito ayuda como harian este ejercicio??

    Escriba un subprograma recursivo que asuma la existencia de un arreglo de cadenas de caracteres y genere la suma de todas las longitudes de las cadenas.

    de antemano Muchisimas Gracias!!!

    ResponderEliminar
  21. como hago contar digitos menores a 5??? en recursivo

    ResponderEliminar
  22. necesito estos Ejercicios quien me podria ayudar. le agradezco


    1. Escriba una definición recursiva de una función que tiene un parámetro n de tipo entero y que devuelve el n-ésimo número de Fibonacci. Los números de Fibonacci se definen de la siguiente manera:
    F0 = 1
    F1 = 1
    Fi+2 = Fi + Fi+1.

    2.-Escriba una función recursiva que ordene de menor a mayor un arreglo de enteros basándose en la siguiente idea: coloque el elemento más pequeño en la primera ubicación, y luego ordene el resto del arreglo con una llamada recursiva.

    3. Escribir un programa que calcule el máximo común divisor (MCD) de dos números enteros positivos. Si M >= N. Una función recursiva para MCD es
    MCD = M si N =0
    MCD = MCD (N, M mod N) si N <> 0
    El programa le debe permitir al usuario ingresar los valores para M y N desde la consola. Una función recursiva es entonces llamada para calcular el MCD. El programa entonces imprime el valor para el MCD. Si el usuario ingresa un valor para M que es < que N el programa es responsable de switchear los valores.

    ResponderEliminar
  23. Thanks for this article. Your article helped me in clearing my doubts on this topic.

    Cheers,
    http://www.flowerbrackets.com/random-numbers-in-java/

    ResponderEliminar
  24. ayuda:

    Dado un arreglo de longitud N con valores generador pseudo aleatoriamente ,
    A) calcular el promedio recursivamente
    B) imprimir todos los impares, recursivamente
    C)imprimir todos los pares, recursivamente
    D)imprimir el arreglo desde el indice 0 hasta el indice N-1
    E) encontrar el elemento mayor

    ResponderEliminar
  25. Execelente informacion, muy bueno la verdad

    ResponderEliminar
  26. Alguien me facilite la suma total de digitos ojo de posicion par y impar de forma recurciva xfa.

    ResponderEliminar
  27. Hola muy buenas amm tenia un ejercicio de un vector x del n elemento encontrar la posicion z

    ResponderEliminar
  28. Para el ejercicio 4 de invertir así funciona bien:

    int invertir(int n)
    {
    if (n < 10)
    { //caso base
    return n;
    }
    else
    {
    String numero = n.ToString();
    int potencia = numero.Length - 1;
    int variable = (n % 10) * (int)Math.Pow(10, potencia);

    return (n % 10) * (int)Math.Pow(10,potencia) + invertir(n / 10);
    }
    }

    ResponderEliminar
  29. a mi no me funciona ninguno en sql con los datos que vosotros estáis indicando, me falta algo??

    ResponderEliminar
  30. alguien sabe como sacar un descuento de forma recursiva??

    ResponderEliminar
  31. Ejercicio 4. Numero invertido, así funciona bien.

    class invertidos{
    int i = 0;
    int invertido(int n) {
    if (n<=0){
    return i;
    }else{
    i=(n%10+i*10);
    n=n/10;
    return invertido(n);
    }
    }
    }

    ResponderEliminar