En vista de que todas las soluciones expuestas (respetando la plantilla) son similares a la de 
eferion quisiera exponer otra pero usando tres funciones para variar :    
Código C++:
Ver original- unsigned int collatz(unsigned int n ) 
- { 
-     if ( n == 1 ) return 0; 
-     return (n % 2) ? 1 + collatz(n * 3 + 1) : 1 + collatz(n / 2); 
- } 
- double totalCollatz(unsigned int n) 
- { 
-     return (n != 0) ? collatz(n) + totalCollatz(n - 1) : 0; 
- } 
-   
- double promedioCollatz(unsigned int n) 
- { 
-     return totalCollatz(n)/n; 
- } 
Saludos 
