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

Cita:
Iniciado por Pantaláimon Ver Mensaje
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 original
  1. potencia ( 2 , 4 )  = 2 * potencia ( 2 , 3 ) =
  2.                     = 2 * 2 * potencia ( 2 , 2 ) =
  3.                     = 2 * 2 * 2 * potencia ( 2 , 1 ) =
  4.                     = 2 * 2 * 2 * 2 * potencia ( 2 , 0 ) =
  5.                     = 2 * 2 * 2 * 2 * 1

en lugar de esto?

Código C++:
Ver original
  1. potencia ( 2 , 4 )  = 2 * potencia ( 2 , 3 )     =
  2.                     = 2 * 2 * potencia ( 2 , 2 ) =
  3.                     = 4 * 2 * potencia ( 2 , 1 ) =
  4.                     = 8 * 2 * potencia ( 2 , 0 ) =
  5.                     = 16 * 1

Por cierto, podríamos ahorrarnos el multiplicar por uno. Por ejemplo:

Código C++:
Ver original
  1. double potencia ( double base , unsigned exponente ) {
  2.   if ( exponente >= 1 ) return base * potencia ( base , exponente - 1 ) ;
  3. }

¡¡¡Saluditos!!!