Ver Mensaje Individual
  #121 (permalink)  
Antiguo 17/12/2014, 08:14
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 2 meses
Puntos: 204
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Cita:
Iniciado por Pantaláimon Ver Mensaje
Pero ahora pienso que sí deberían hacerse por las razones que he explicado. Es decir, la función con ver == 0 debe hacer todos los cálculos excepto los directamente relacionados con la salida estándar.
Mi versión:
Código C++:
Ver original
  1. void bucleChequeo( int numero, int candidato, int primerPrimo, int ver )
  2. {
  3.   int exp = ComprobarPrimo( &numero, candidato );
  4.   if ( exp > 0 && ver)
  5.   {
  6.     if ( primerPrimo == 0 ) printf( " *" );
  7.     if ( exponente == 1 )
  8.       printf( " %d", base );
  9.     else if ( exponente > 0 )
  10.       printf( " %d^%d", base, exponente );
  11.  
  12.     primerPrimo = 0;
  13.   }
  14.  
  15.   candidato += 2;
  16.   if ( numero > 1 )
  17.     bucleChequeo( numero, candidato, primerPrimo, ver );
  18. }

Tu propuesta:
Código C++:
Ver original
  1. void bucleChequeo( int numero, int candidato, int primerPrimo, int ver )
  2. {
  3.   int exp = ComprobarPrimo( &numero, candidato );
  4.   if ( exp > 0 )
  5.   {
  6.     if ( ver && primerPrimo == 0 ) printf( " *" );
  7.     if ( ver && exponente == 1 )
  8.       printf( " %d", base );
  9.     else if ( ver && exponente > 0 )
  10.       printf( " %d^%d", base, exponente );
  11.  
  12.     primerPrimo = 0;
  13.   }
  14.  
  15.   candidato += 2;
  16.   if ( numero > 1 )
  17.     bucleChequeo( numero, candidato, primerPrimo, ver );
  18. }

En ambos casos el algoritmo calcula de forma correcta la descomposición del número, que es lo que se pide en el enunciado... la única diferencia es que mi versión es ligeramente más eficiente.

No se, lo mismo es que hay algo que no entiendo, pero tal y como lo veo, los "if" que acompañan a los printf no tienen nada que ver con la descomposición del número en factores. Su función es componer, si procede, la salida del programa... pero el resultado, se imprima o no, ya está calculado.