迭代对数求幂

Iterative logarithmic exponentiation

本文关键字:迭代      更新时间:2023-10-16

我最近搞砸了一次面试(手机屏幕上有collabedit)。问题是:编写一个求x^y的幂的迭代O(lgn)算法(x是二重,y>0是整数)。

我首先做了递归分治,并试图将其转换为迭代。。。我不能:S有没有一种方法可以将递归转换为迭代(尾部递归很容易,但递归函数有两个可能的递归调用,这取决于决定调用哪个调用的条件)?

展开的典型方法使用b的逐位表示。计算a1、a2,a4和a8等,并在每一步确定是否将其乘以总数。如图所示:

double result = 1;
double multiplier = a;
for (double multiplier = a; b != 0; multiplier *= multiplier, b /= 2) {
if (b % 2 == 1) {
result *= multiplier;
}
}

例如,要计算35,我们会注意到5有二进制表示101,所以我们会乘以31

希望这能有所帮助!