Ver Mensaje Individual
  #32 (permalink)  
Antiguo 22/11/2014, 01:41
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años, 6 meses
Puntos: 49
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Con dos funciones llego al mismo resultado que eferion. Lo pongo más compactado pero es lo mismo:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #define NUMERO 17
  3.  
  4. double Collatz ( unsigned num ) ;
  5. double promedioCollatz ( unsigned num ) ;
  6.  
  7. int main ( ) {
  8.   printf ( "\n%g\n" , promedioCollatz ( NUMERO )  ) ;
  9.   return 0 ;
  10. }
  11.  
  12. double Collatz ( unsigned num )  {
  13.   return ( num == 1 ) ? 0 : ( ( num %  2 != 0 ) ?  1 + Collatz ( 3 * num + 1 ) : 1 + Collatz ( num / 2 ) ) ;
  14. }
  15.  
  16. double promedioCollatz ( unsigned num ) {
  17.   return ( num == 1 ) ? 0 : ( Collatz( num ) + ( num - 1 ) * promedioCollatz( num - 1 ) ) / num ;
  18. }

No olvidar mi anterior propuesta usando dos argumentos.

¡¡¡Saluditos!!!