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

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

计算数字的幂

虽然JavaScript有一个内置的pow函数来计算一个数字的幂,你可以递归地编写一个类似的函数,它可以非常有效。 唯一的问题是指数必须是整数。
假设你想要计算xn,其中x是任何实数,n是任何整数。 如果n为0,那很容易,因为x0=1,无论x是多少。 这是一个很好的例子。
所以现在让我们看看当n为正时会发生什么。 让我们首先回想一下,当你乘以x的幂时,你添加指数:xaxb=xa+b 对于任何基数 x和任何指数ab都应该成立。 因此,如果n为正数且为偶数,那么xn=xn/2xn/2。 如果你以递归方式计算y=xn/2,那么你可以将xn计算为yy。 如果n是正数和奇数怎么办? 那么xn=xn1xn1或者是0或者是正数和偶数。 我们刚刚看到当指数为0或者是正数和偶数时如何计算x的幂。 因此,您可以递归计算xn1,然后使用此结果计算xn=xn1x
n为负时怎么办? 那么xn=1/xn,指数n为正,因为它是负数的否定。 所以你可以递归计算xn并取其倒数。
将这些观察结果放在一起, 我们得到了以下计算 xn 的递归算法:
  • 基本情况是n=0x0=1
  • 如果n为正数且为偶数,则递归计算y=xn/2,那么xn=yy。 请注意,在这种情况下,您只需要进行一次递归调用,只计算一次xn/2,然后将此递归调用的结果乘以它。
  • 如果n是 正数且为奇数,递归计算xn1,使指数为0或为正偶数。 那么,xn=xn1x
  • 如果n为负数,则递归计算xn,以使指数变为正数。 然后,xn=1/xn

本内容是 达特茅斯计算机科学 教授 Thomas CormenDevin Balkcom,与可汗学院的计算课程团队合作完成。内容获得许可 CC-BY-NC-SA

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.