LeetCode.50 快速幂算法 pow(x,n)

本文深入解析了快速幂算法,一种高效计算x的n次幂的方法。通过递归将n次幂拆分为若干次平方,利用递归的展开性,从逻辑链的右边往左边推,实现了对正数和负数指数的有效处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:实现 pow(x, n) ,即计算 x 的 n 次幂函数。

示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.00000, -2
输出: 0.25000
解释: 2-2 = 1/22 = 1/4 = 0.25

解法:
将n次幂拆分成若干次平方。以示例1的n = 10为例:
0 -> 1-> 2-> 5-> 10;

这样一来,利用递归的展开性,可以从逻辑链的右边往左边推。当n为奇数时,后一项的结果为y = y * y * x,当n为偶数是,后一项为y = y * y。用一开始的n /2 ,判断递归每一层的奇偶,来判断该层需要返回的y值。直到最后一层n == 0跳出,返回0。因为任何数的0次方都是0。

class Solution {
public:
	double quickMul(double x, int n)
	{
		if (n == 0)
			return 1.0; //x的0次方等于1
		double tmp = quickMul(x , n/2); //从右到左一层层展开

		return n % 2 == 0 ? tmp*tmp : tmp * tmp * x; //奇数则要额外乘X
	}

	double myPow(double x, int n) {
		double result;
		if (n >= 0)
			result = quickMul(x, n);
		else
			result = 1.0 / quickMul(x, -n); //n为负,在倒数上操作

		return result;
	}
};

这题还有迭代算法,看的不是很懂没法复现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值