C++ 迭代对数幂运算
最近我用collabedit轰炸了一次采访(电话屏幕)。 问题是: 写一个迭代的O(lgn)算法来求x^y的幂(x是双精度的,y>0是整数) 我首先做了递归的分而治之,并试图把它转换成迭代的。。。而我不能:SC++ 迭代对数幂运算,c++,recursion,tail-recursion,iteration,exponentiation,C++,Recursion,Tail Recursion,Iteration,Exponentiation,最近我用collabedit轰炸了一次采访(电话屏幕)。 问题是: 写一个迭代的O(lgn)算法来求x^y的幂(x是双精度的,y>0是整数) 我首先做了递归的分而治之,并试图把它转换成迭代的。。。而我不能:S 是否有一种方法可以将递归转换为迭代(尾部递归很容易,但递归函数有两个可能的递归调用,这取决于决定调用哪个调用的条件),这一方法的典型展开方式是使用b的按位表示。计算a1、a2、a4、a8等,并在每一步确定是否将其乘以总数。如下所示: double result = 1; double mu
是否有一种方法可以将递归转换为迭代(尾部递归很容易,但递归函数有两个可能的递归调用,这取决于决定调用哪个调用的条件),这一方法的典型展开方式是使用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和34
希望这有帮助