Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/11/2014, 20:24
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Petando la pila. Problemas y retos usando recursividad.

La propuesta parece interesante, ya veremos como acaba

ejercicio 1:

Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. int contarNegativos(int arr[], int n)
  4. {
  5.   if ( n > 0 )
  6.     return (*arr < 0) + contarNegativos( ++arr, n-1 );
  7.   return 0;
  8. }
  9.  
  10. int main (void)
  11. {
  12.   int arr[] = {1, 4, -3, 2, -1, -8, 0, 1};
  13.   int n = sizeof arr / sizeof *arr;
  14.  
  15.   /* calcular cantidad de negativos */
  16.   int cantidad = contarNegativos(arr, n);
  17.   /* mostrar cantidad de negativos */
  18.   printf("%d\n", cantidad);
  19.   return 0;
  20. }

ejercicio 2:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. /* más codigo si hace falta */
  6.  
  7. char* diag(char* cadena, char* resultado)
  8. {
  9.   if (*cadena)
  10.   {
  11.     int espacio = *resultado + 1;
  12.     sprintf( resultado, "%*c\n%c", espacio, *cadena, espacio );
  13.     diag( ++cadena, resultado + espacio + 1 );
  14.   }
  15.   else
  16.     *resultado = 0;
  17.   return resultado;
  18. }
  19.  
  20. int main (void) {
  21.     char cadena [] = "abcde";
  22.     int n = strlen(cadena);
  23.  
  24.     char* resultado = (char*)calloc(n * n + 1, sizeof(char)); /* doy mas espacio del necesario */
  25.  
  26.     // a partir de la cadena de caracteres retornar la nueva que tenga los caracteres en diagonal
  27.     resultado = diag(cadena, resultado);
  28.  
  29.     //mostrar resultado
  30.     puts(resultado);
  31.  
  32.     free(resultado);
  33.     return 0;
  34. }

La única licencia que me he permitido es cambiar el malloc por calloc en el segundo ejercicio. Escribir de forma recursiva en un buffer sin inicializar no me parece buena idea.