宏观角度认识递归之 Pow(x,n) 问题

50. Pow(x, n) - 力扣(LeetCode)

计算 x 的 n 次幂,如果是直接暴力求解的话,会造成计算时间周期过长,所以要从别的角度出发,将幂等数分为两个幂等数相乘,例如:三的八次方,等于三的四次方乘以三的四次方,大致可以分为以下两种情况:

  1. 无法分为两个幂等数,则再乘一次 x;

  2. 可以分为两个幂等数,即转换为两个幂等数相乘;

从中也可以发现,每个轮回,都是相同的子问题;

  1. 重复子问题 -> 函数头:给定一个数 x ,要求其 n 次幂,返回结果;

  2. 解析子问题 -> 函数体:x 的 n 次幂等于两个 x 的 n/2 次幂 进行相乘,还要进行判断,判断 n%2 是否为 0 ,如果为 0,则为情况 2,如果为 1,则为情况 1,就需要再乘一次 x;

  3. 递归出口:当 n == 0 的时候,return 1;

还有一个注意点:就是 n 可以为负数,此时 x 的 n 次幂就等于 x 的 -n 次幂 的倒数;

代码实现:

java 复制代码
class Solution {
    public double myPow(double x, int n) {
        return n < 0 ? 1.0 / Pow(x,-n) : Pow(x,n);
    }
    public double Pow(double x,int n){
        if(n == 0) return 1;
        double ret = Pow(x,n/2);
        return n % 2 == 0 ? ret * ret : ret * ret * x; 
    }
}
相关推荐
好学且牛逼的马5 分钟前
【Hot100|17-LeetCode 73. 矩阵置零 - 完整解法详解】
算法·leetcode·职场和发展
进击的小头10 分钟前
IIR滤波器核心原理深化:从差分方程到工业级实现
c语言·python·算法
AllData公司负责人20 分钟前
【亲测好用】数仓建模平台能力演示
大数据·数据库·算法
爱学习的阿磊22 分钟前
自定义操作符重载指南
开发语言·c++·算法
zhuanggoahead39 分钟前
拓扑排序(Kahn算法)
网络·数据结构·c++·算法·排序算法
码农水水1 小时前
SpringBoot配置优化:Tomcat+数据库+缓存+日志全场景教程
java·数据库·spring boot·后端·算法·tomcat·哈希算法
JMchen1231 小时前
Android音频处理全解析:从3A算法到空间音频,打造专业级音频体验
android·经验分享·算法·kotlin·android studio·音视频
有一个好名字1 小时前
力扣-省份数量
python·算法·leetcode
iAkuya1 小时前
(leetcode)力扣100 55全排列
算法·leetcode·职场和发展
2301_765703141 小时前
动态库热加载技术
开发语言·c++·算法