news 2026/7/7 8:09:37

【递归算法】快速幂解决 pow(x,n)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【递归算法】快速幂解决 pow(x,n)

题目链接:pow(x,n)

一、题目解析




题目很简单,要求x的n次幂。

要注意n的取值范围:n可能是负数,这时候我们要利用数学中x⁻ⁿ = 1 / xⁿ来转换;n可能是 -2³¹,若转换成正数则会超过 int 类型的最大取值 2³¹-1。

二、算法原理

2.1 解法一:循环

思路很简单,循环n次即可。

for (int i = 0; i < n; i ++) x *= x;

时间复杂度:O(N)

但是,当n取值很大时,比如 n = 1000,程序的效率就会降低,甚至超时。

2.2 解法二:快速幂

快速幂可以采用两种方法来实现:

  1. 递归实现✅
  2. 循环实现

我们这里采用递归实现。

先看示例1:

  • 要求 2¹⁰,我们可以通过 2⁵ * 2⁵ 来得到;
  • 要求 2⁵,我们可以通过 2² * 2² * 2 来得到;
  • 要求 2²,我们可以通过 2 * 2 来得到;
  • 要求 2,我们可以通过 2⁰ (1) * 2 来得到;

即:

三、代码实现

设计函数头——寻找子问题:

根据算法原理,我们可以知道,该问题的子问题是:计算所给的x的n次幂
因此函数头有两个参数x、n,返回值为与所给的x相同的类型:double pow(double x, int n)

设计函数体——子问题所做的事:

每一个子问题都是先得到x的n / 2次幂,然后根据当前n的奇偶性决定是 xⁿ * xⁿ,还是 xⁿ * xⁿ * x,即:

  • temp = pow(x, n / 2)
  • return (n % 2 == 0) ? temp * temp : temp * temp * temp
递归出口:

当 n == 0 时,返回1,因为所有数的0次幂都是1

代码实现如下:

class Solution { public double myPow(double x, int n) { // 分n为正负两个情况 return (n < 0) ? 1.0 / pow(x, -n) : pow(x, n); } public double pow(double x, int n) { // 递归出口 if (n == 0) return 1.0; double temp = pow(x, n / 2); // 分奇偶情况 return (n % 2 == 0) ? temp * temp : temp * temp * x; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 15:06:27

基于51单片机的智能温控风扇 红外遥控 人体感应控制 电子DIY

目录硬件组成功能实现软件设计制作要点扩展应用源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;硬件组成 51单片机作为核心控制器&#xff0c;通常选用STC89C52或AT89S52型号&#xff0c;负责处理传感器数据并控制风扇转速。 DS18B20温…

作者头像 李华
网站建设 2026/6/26 9:47:24

C++ 信号量

C 信号量&#xff08;Semaphore&#xff09;详解与编程实践 信号量是多线程同步与互斥的核心工具之一&#xff0c;它能有效解决多线程间的资源竞争、任务协同问题。本文将从信号量的核心概念出发&#xff0c;逐步讲解其在 C 中的实现与使用&#xff0c;帮助你快速掌握这一关键技…

作者头像 李华
网站建设 2026/7/4 10:35:00

大数据领域:数据清洗推动企业数字化转型

大数据领域&#xff1a;数据清洗推动企业数字化转型关键词&#xff1a;数据清洗、数据质量、企业数字化转型、大数据处理、数据治理、数据价值、数据生命周期摘要&#xff1a;在企业数字化转型的浪潮中&#xff0c;“数据"被称为新时代的"石油”。但未经处理的原始数…

作者头像 李华
网站建设 2026/6/26 10:23:09

Hadoop 助力大数据领域的精准营销

Hadoop 助力大数据领域的精准营销 关键词&#xff1a;Hadoop、大数据、精准营销、分布式计算、用户画像、数据挖掘、商业智能 摘要&#xff1a;在“酒香也怕巷子深”的数字时代&#xff0c;企业如何从海量数据中精准找到目标用户&#xff1f;Hadoop作为大数据领域的“基建狂魔”…

作者头像 李华
网站建设 2026/6/29 16:37:25

高可用的三件事——无状态化、水平扩展与故障转移的协同设计

高可用不是简单的冗余堆砌&#xff0c;而是无状态化、水平扩展与故障转移三者协同的艺术品 在掌握了系统压测方法论&#xff0c;能够准确评估系统容量边界后&#xff0c;我们面临一个更根本的挑战&#xff1a;如何让系统在真实流量冲击和故障发生时保持稳定&#xff1f;高可用架…

作者头像 李华