If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Calcular potencias de un número

Aunque JavaScript tiene una función pow interna que calcula potencias de un número, puedes escribir una función parecida de manera recursiva, y puede ser muy eficiente. El único problema es que el exponente tiene que ser un número entero.
Supón que quieres calcular xn, en donde x es cualquier número real y n es cualquier número entero. Es fácil si n es 0, ya que x0=1 sin importar qué valor tenga x. Ese es un buen caso base.
Así que ahora veamos qué pasa cuando n es positivo. Empecemos por recordar que cuando multiplicas potencias de x, sumas los exponentes: xaxb=xa+b para cualquier base x y cualesquiera exponentes a y b. Por lo tanto, si n es positivo y par, entonces xn=xn/2xn/2. Si fueras a calcular y=xn/2 de manera recursiva, entonces podrías calcular xn como yy. ¿Qué pasa si n es positivo e impar? Entonces xn=xn1x, y n1 es 0 o es positivo y par. Acabamos de ver cómo calcular las potencias de x cuando el exponente es 0 o positivo y par. Por lo tanto, podrías calcular xn1 de manera recursiva, y después usar este resultado para calcular xn=xn1x.
¿Qué pasa cuando n es negativa? Entonces xn=1/xn, y el exponente n es positivo, ya que es la negación de un número negativo. Así que puedes calcular xn de manera recursiva y tomar su inverso.
Al juntar estas observaciones, obtenemos el siguiente algoritmo recursivo para calcular xn:
  • El caso base es cuando n=0 y x0=1.
  • Si n es positivo y par, calcula y=xn/2 de manera recursiva y después xn=yy. Observa que puedes salirte con la tuya al hacer una sola llamada recursiva en este caso, al calcular xn/2 una sola vez y después multiplicar el resultado de esta llamada recursiva por sí misma.
  • Si n es positivo e impar, calcula xn1 de manera recursiva de modo que el exponente sea 0 o positivo y par. Después, xn=xn1x.
  • Si n es negativo, calcula xn de manera recursiva de modo que el exponente se vuelva positivo. Después, xn=1/xn.

Este contenido es una colaboración de los profesores de Dartmouth Computer Science Thomas Cormen y Devin Balkcom, con el equipo de contenidos de computación de Khan Academy. El contenido está bajo licencia CC-BY-NC-SA.

¿Quieres unirte a la conversación?

  • Avatar starky tree style para el usuario Francisco Narvaez
    alguien tiene el siguiente desafio resuelto?
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
    • Avatar piceratops seedling style para el usuario Ale
      Claro, aquí está :)

      var isEven = function(n) {
      return n % 2 === 0;
      };

      var isOdd = function(n) {
      return !isEven(n);
      };

      var power = function(x, n) {
      println("Computing " + x + " raised to power " + n + ".");
      // base case
      if(n === 0) {
      return 1;
      }
      // recursive case: n is negative
      if(n < 0) {
      return 1 / power(x, -n);
      }
      // recursive case: n is odd
      if(isOdd(n)) {
      return power(x, n-1) * x;
      }
      // recursive case: n is even
      if(isEven(n)) {
      var y = power(x, n/2);
      return y * y;
      }
      };

      var displayPower = function(x, n) {
      println(x + " to the " + n + " is " + power(x, n));
      };

      displayPower(3, 0);
      Program.assertEqual(power(3, 0), 1);
      displayPower(3, 1);
      Program.assertEqual(power(3, 1), 3);
      displayPower(3, 2);
      Program.assertEqual(power(3, 2), 9);
      displayPower(3, -1);
      Program.assertEqual(power(3, -1), 1/3);

      Program.assertEqual(power(7, 3), 343);
      Program.assertEqual(power(6, 5), 7776);
      (2 votos)
  • Avatar blobby green style para el usuario Jess Mena
    por que JavaScript aplica la funcion pow en el calculo, teniendo en cuenta el numero entero.
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar eggleston blue style para el usuario PMP
    ¿Qué sucede cuando x=0 y n=-3, por ejemplo? Tendríamos que x^-3=1/x^3=1/0=indeterminado, cuando el resultado debería ser 0.
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar blobby green style para el usuario Ruiz Sebasdj
    Se que con pow puedo potenciar, pero lo que trataron de explicar aqui no hay por donde cogerlo.
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.