Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代对数幂运算_C++_Recursion_Tail Recursion_Iteration_Exponentiation - Fatal编程技术网

C++ 迭代对数幂运算

C++ 迭代对数幂运算,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

最近我用collabedit轰炸了一次采访(电话屏幕)。 问题是: 写一个迭代的O(lgn)算法来求x^y的幂(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和34

希望这有帮助