Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: edr89 en 4 Noviembre 2013, 19:31 pm



Título: [C] Llenar arreglo con recursividad
Publicado por: edr89 en 4 Noviembre 2013, 19:31 pm
Hola, he buscado información sobre recursividad pero en su mayoria son algoritmos de busqueda y ordenamiento, debo crear un arreglo de tamaño n e imprimirlo en pantalla de modo que forme un rectangulo, es decir, si el usuario elige 4, el resultado es:

1 1 1 1
1 1 1 2
1 1 2 3
1 2 3 4


Cada elemento se guarda en el arreglo de forma recursiva, cómo funciona esto?.

Poco he hecho con recursividad y estoy mas acostumbrado a trabajar con iteraciones, en este caso se me ha ocurrido trabajar con ciclos for() para ir procesando renglon por renglon pero no es recursividad.

   1. Si la funcion se llama a si misma el arreglo se crea dentro o fuera de la funcion? es local o global?
   2. Puedo reservar espacio dinamico para el arreglo del tamaño que indica el usuario? es decir:
Código
  1. x = malloc(sizeof(int) * n);
   3. Al llamar a la función el arreglo se pasa como parametro? si es que se crea fuera de la funcion
   
Mi problema es desarrollar el algoritmo para guardar la secuencia de numeros , por favor si alguien me puede orientar se lo agradeceré.

Saludos!


Título: Re: [C] Llenar arreglo con recursividad
Publicado por: xiruko en 4 Noviembre 2013, 21:30 pm
Igual no es la mejor solución pero funcionar funciona:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void Procesar(int *p, int nelem, int nrestantes);
  5.  
  6. int main()
  7. {
  8. int nelem, i;
  9. int *arreglo;
  10.  
  11. printf("Introduce la cantidad de elementos: ");
  12. scanf(" %d", &nelem);
  13. arreglo=malloc(nelem*sizeof(int));
  14.  
  15. // inicializacion
  16. for (i=0; i<nelem; i++) arreglo[i]=1;
  17.  
  18. // funcion recursiva para procesar y mostrar por pantalla el arreglo
  19. Procesar(arreglo, nelem, nelem);
  20.  
  21. free(arreglo);
  22. return 0;
  23. }
  24.  
  25. void Procesar(int *p, int nelem, int nrestantes)
  26. {
  27. int i;
  28.  
  29. // procesar arreglo
  30. for (i=0; i<(nelem-nrestantes); i++) p[nelem-1-i]++;
  31.  
  32. // imprimirlo
  33. for (i=0; i<nelem; i++) printf("%d", p[i]);
  34. printf("\n");
  35.  
  36. // procesar siguiente etapa
  37. if (nrestantes>1) Procesar(p, nelem, nrestantes-1);
  38. }

Saludos!


Título: Re: [C] Llenar arreglo con recursividad
Publicado por: edr89 en 6 Noviembre 2013, 04:15 am
Igual no es la mejor solución pero funcionar funciona

cambie un para de cosas para poder entender el proceso y me quedo algo asi:
Código
  1. void Procesar(int *p, int nelem, int nrestantes)
  2. {
  3.    int i=0,j=0;
  4.    // procesar arreglo
  5.    for(i=0;i<(nelem - (nelem - nrestantes));i++)
  6.    {
  7.        p[i]=1;
  8.    }
  9.    if((nelem - nrestantes) !=0)
  10.        {
  11.            for(i=nrestantes,j=2;i<nelem;i++)
  12.            {
  13.                p[i]= (j);
  14.                j++;
  15.            }
  16.        }
  17.    for (i=0; i<nelem; i++)
  18.    {
  19.        printf("%d ", p[i]);
  20.    }
  21.    putchar('\n');
  22.    // procesar siguiente etapa
  23.    if (nrestantes>1)
  24.    {
  25.        Procesar(p, nelem, nrestantes-1);
  26.    }
  27. }
  28.  
  29.  
  30.