Resultados 1 al 5 de 5

recursividad

  1. #1 recursividad 
    Iniciado
    Fecha de ingreso
    Sep 2010
    Mensajes
    9
    Descargas
    1
    Uploads
    0
    hola nuevamente necesito ayuda me dejaron que hiciera una coleccion de ejercicios recursivos en c++ son mas de 40. no se si alguno de ustedes tiene unos por ahi que me los muestre y asi yo los reviso porque el problema es que tengo que entenderlos. y la verdad no se donde buscar por eso les pido ayuda a todos por favor.


    atte.

    krizalid
    Citar  
     

  2. #2  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    En realidad cualquier problema iterativo (mediante bucles tipo while y for), siempre puede ser transformado a recursivo, y viceversa.

    De todas maneras, te dejo una colección de los problemas típicos:

    • Imprimir "Hola mundo" al revés: "odnum aloH".
    • Sumar los N primeros números: Sum(n) = Sum(n-1)+n.
    • Potencia de un número: a^b = a^(b-1)*a
    • Factorial de un número: a! = a*(a-1)!
    • Sucesión de fibonacci: fib(a) = fib(a-1)+fib(a-2).
    • Cálculo de áreas.
    • Cálculo de volúmenes.
    • Torres de Hanoi: Mover n-1 discos de A a B, usando C como auxiliar, y luego mover n-1 discos de B a C, usando A como auxiliar.
    • Búsqueda binaria de un número en un vector ordenado: llamas recursivamente en la mitad en la que es probable esté el número, descartando la otra mitad, hasta el caso base en el que la mitad en la que busques sea de un elemento.
    • Generar permutaciones de n elementos, tomados de m en m.
    • Generar variaciones de n elementos, tomados de m en m.
    • Rotar 90º una imagen de NxN píxeles: divides la imagen en 4 partes iguales. Rotar una imagen es rotar las 4 partes, y cada subparte, la rotas, hasta llegar al caso base: 2x2 píxeles.
    • Ordenar un vector mediante MergeSort.
    • Ordenar un vector mediante QuickSort.
    • Hallar la derivada de un polinomio de grado N: derivas el polinomio de grado n-1, hasta llegar al caso base, que es grado 1.
    • Hallar la raiz de una función mediante el método de Newton: Xn=Xn-1*(f(Xn-1)/f'(Xn-1))
    • Resolver un laberinto.
    • Resolver un sudoku.
    • Problema de las 8 reinas.
    • Encontrar el mejor movimiento a efectuar en una partida de parchís.
    • Encontrar la distancia mínima entre dos nodos de un grafo ponderado, mediante backtracking.
    • Devolver una cantidad de dinero usando la menor cantidad de monedas posibles.
    • Ejercicios con fractales.
    • Copia de un fichero de un soporte a otro.
    • Búsqueda de patrones en una cadena o texto.
    • Búsqueda de un patrón en una imagen binaria (de dos colores).
    • Hallar la mejor ruta de un paquete en una red (routing).
    • Y un largo etc...


    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Sep 2010
    Mensajes
    9
    Descargas
    1
    Uploads
    0
    ok. el problema es que estoy empezando a programar en c++ y lo que necesito es el codigo o que me indiquen donde buscar ya que crear el codigo es lo que me cuesta. por eso necesito ejemplos para entenderlos y ponerlos en practica. he estado buscando pero he encontrado poco.

    atte. krizalid
    Citar  
     

  4. #4  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    Acá tenés un ejemplo en C del factorial, lo podés compilar en c++ cambiando los include (por ej. de stdio.h a cstdio).
    La función recursiva es fac.

    Cualquier recursión se compone básicamente de 2 partes, el tratamiento de los casos base, y el de los inductivos. Para estos últimos se utilizan casos inductivos de menor 'tamaño'. El concepto de 'tamaño' depende de la naturaleza de los parámetros sobre los que se aplica la recursión.

    En el caso del factorial, se hace inducción sobre los números naturales.
    El caso base sería el 1 mientras que el inductivo cualquiera de la forma n>1.


    Código:
      #include <stdio.h>
      #include <stdlib.h>
      #include <limits.h>
      
      long fac(long n)
      {
        if(n<=1)
          return 1;
        else
          return n*fac(n-1);
      }
      
      int main(int n,char **par)
      {
        long x;
        int m;
      
        if(n!=2)
        {
          printf("Llamado incorrecto\n");
          return -1;
        }
        m = atol(par[1]);
        if(m==INT_MAX || m==INT_MIN)
        {
          printf("Error de rango\n");
          return -1;
        }
        if(m>19)
        {
          printf("Numero demasiado alto\n");
          return -1;
        }
        x = fac(m);
        printf("fac(%d): %ld\n",m,x);
        return 0;
      }
    Saludos
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

  5. #5  
    Iniciado
    Fecha de ingreso
    Sep 2010
    Mensajes
    9
    Descargas
    1
    Uploads
    0
    Muchisimas gracias por el ejemplo me fue de mucha ayuda se los agradezco.
    ahora lo demas es por mi cuenta.

    krizalid.
    Citar  
     

Temas similares

  1. Recursividad con vectores en Java
    Por Hispasat88 en el foro GENERAL
    Respuestas: 24
    Último mensaje: 22-04-2009, 19:50
  2. duda recursividad pascal
    Por kamsky en el foro GENERAL
    Respuestas: 4
    Último mensaje: 10-04-2006, 16:19

Marcadores

Marcadores