Cita:
Iniciado por Pantaláimon Buenas!
usa un algoritmo de divide y vencerás. Que quizá para pequeños cómputos no se nota, pero en caso de trasladar esta función para calculo de potencias con exponentes muy grandes el algoritmo de kutcher gana sobradamente. Por poner un ejemplo, si el exponente es 2^32 , tu algoritmo realizará del orden de 2^32 multiplicaciones mientras que el de kutcher realizará 33 multiplicaciones.
¿Insinúas que la función recursiva hace esto:
Código C++:
Ver originalpotencia ( 2 , 4 ) = 2 * potencia ( 2 , 3 ) =
= 2 * 2 * potencia ( 2 , 2 ) =
= 2 * 2 * 2 * potencia ( 2 , 1 ) =
= 2 * 2 * 2 * 2 * potencia ( 2 , 0 ) =
= 2 * 2 * 2 * 2 * 1
en lugar de esto?
Código C++:
Ver originalpotencia ( 2 , 4 ) = 2 * potencia ( 2 , 3 ) =
= 2 * 2 * potencia ( 2 , 2 ) =
= 4 * 2 * potencia ( 2 , 1 ) =
= 8 * 2 * potencia ( 2 , 0 ) =
= 16 * 1
Por cierto, podríamos ahorrarnos el multiplicar por uno. Por ejemplo:
Código C++:
Ver originaldouble potencia ( double base , unsigned exponente ) {
if ( exponente >= 1 ) return base * potencia ( base , exponente - 1 ) ;
}
¡¡¡Saluditos!!!