在 O(log n) 中计算 x ^ y

标签 c algorithm big-o

<分区>

面试问题:

Calculate x ^ y in O(log n)

有不同的答案,例如“使用 Indian Power 算法”或

double power(double x, int y) 
{
    if(y == 0) return 1;

    double d = power(x, y/2);

    if(y%2 == 0) return d*d;
    else return x*d*d;
}
  1. 是正确答案吗?

  2. 有没有更好的方法来为这个问题编写代码?

最佳答案

这叫做 Exponentiation by Squaring .就实现而言,这是一个品味问题。您的递归实现很好,但非递归实现(来自上面的链接)对于不喜欢递归或错误地认为它在某种程度上“浪费”或“缓慢”的人来说可能看起来更干净一些。

关于在 O(log n) 中计算 x ^ y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195252/

相关文章:

c++ - 在 z/OS 上替换 C++ 中的 C 套接字 API

c - ANSI C 链表。 Add() 函数的行为很有趣

PHP 每月预订

performance - 当 f(n) = n^.1 且 g(n) = log(n)^10 时,f(n) = Ω(g) 吗?

c - C 中#error 指令的输出

javascript - 在 Javascript 中查找坏点的算法

python - 满足 "Hello World"局部最优的简单遗传算法

string - 特殊交织字符串编码

algorithm - O 指数和幂的符号证明

c - 我不明白 char 数组和 char * string 之间的区别