Ver Mensaje Individual
  #33 (permalink)  
Antiguo 22/11/2014, 13:28
kutcher
 
Fecha de Ingreso: noviembre-2014
Mensajes: 36
Antigüedad: 10 años, 1 mes
Puntos: 13
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Cita:
Iniciado por eferion Ver Mensaje
Esa función está mal... no tiene que devolver el número de pasos hasta llegar al 1... tienes que devolver "el promedio", es decir, si esa función recibe un "4" tiene que hacer el siguiente cálculo: ( PASOS_COLLATZ( 4 ) + PASOS_COLLATZ( 3 ) + PASOS_COLLATZ( 2 ) + PASOS_COLLATZ( 1 ) ) / 4
menuda pifiada me he mandado xD.. esto es lo que provoca el andar apurado y el no aisimilar bien el problema pero bueno para el caso dejo mi solución:

Código C++:
Ver original
  1. unsigned collatz(unsigned n )
  2. {
  3.     if ( n == 1 ) return 0;
  4.     return (n % 2) ? 1 + collatz(n * 3 + 1) : 1 + collatz(n / 2);
  5. }
  6. double promedioCollatz(unsigned n)
  7. {
  8.     double x = collatz(n);
  9.     return (n == 1) ? x :(x + (n-1) * promedioCollatz(n-1)) / n;
  10. }

Saludos