【发布时间】:2014-10-23 15:33:51
【问题描述】:
我发现了一个 pow(x, n) 的迭代实现,它需要 o(log n) 时间和恒定空间,如下所示:
double pow(double x, int n) {
double left = x;
double right = 1;
if (n<0) return 1/(x*pow(x,-n-1)); // Avoid binary overflow!!!!
if (!n) return 1;
while (n>1)
{
if (n%2==1) right *= left;
left = left * left;
n = n/2;
}
return left * right;
}
但是我找不到这个算法的任何解释。我理解使用分而治之技术的递归解决方案,我猜这个解决方案使用了类似的技巧。但我不明白为什么会这样。谁能给我解释一下这个算法? 谢谢!
【问题讨论】:
-
@TheParamagneticCroissant 感谢您的链接!真的很有帮助!