2023-08-17 15:10阅读: 7评论: 0推荐: 0

《剑指Offer》-16-数值的整数次方

将 n 次相乘的幂运算转化为 log2N 次平方运算,并且采用递归算法

原书给出的最优算法本身不处理负数,是外层函数处理的

double myPow(double x, int n) {
double res = pow(x, abs(n));
if (n < 0)res = 1 / res;
return res;
}
double pow(double x, int n) {
if (n == 0)return 1;// 不管是奇数还是偶数,最终移位运算会得到0,也就是n最终=0
// 这里我们是用移位运算替代了/2运算
// if (n == 1)return x;
double res = myPow(x, n >> 1);// 自顶向下分解为 log2n 次平方操作
res *= res;// 自底向上平方 log2n次
// 比如3和2都是右移1次变成1,两次变成0,所以最后对于奇数次的情况需要补一次,同时也是最外层的底数本身
if (n & 1)res *= x;
return res;
}

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17637647.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(7)  评论(0编辑  收藏  举报
历史上的今天:
2022-08-17 力扣-15-三数之和
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起