【递归搜索回溯专栏】专题一递归:快速幂

简介: 【递归搜索回溯专栏】专题一递归:快速幂


题目来源

本题来源为:

Leertcode 50.Pow(x,n)

题目描述

实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。

算法原理

解法一:暴力+循环

看到这个题很容易就想到暴力解决。

例如2的10次方,我们就让循环10次,每次进行相乘,但这么做肯定会超时。

解法二:快速幂

快速幂是一个算法,有两种解决办法:

  1. 递归
  2. 循环
    这里我们讲解递归的方法:

例子1:316的计算:

我们将16次方拆成两个8次方相乘,将8次方拆成两个4次方相乘,依次内推,当数是1次方的时候,我们拆成3的0次方。而这个0次方也将作为我们的出口,因为0次方在拆也还是0次方。

例子2:321

首先将21次方拆成一半,除不尽,就在多乘以本身这个值,依次内推。

分析到这,我们其实已经发现这道题相同的子问题了,那么就用递归来解决:

相同子问题->函数头

本题相同子问题很好分析,就是计算xn;

只关心每个子问题做了什么->函数体

那么子问题应该做什么呢?

分两步:

  1. 先计算x的一半次方的值,将其保存起来。
  2. 看这个结果能否被除尽,能除尽直接返回,不能除尽就在这个值的基础上再乘一个x.

函数出口

写递归一定要写出口,防止造成死循环。

本题函数出口就是当n==0的时候,返回1即可。

细节问题:

其实分析到返回值,就可以代码实现,但是还要注意一下细节问题。

因为n有可能会无穷大也有可能会无穷小或者为负数:

  1. 当为负数时:

    我们在计算完结果跟1进行相除,变成分数。
  2. 当为无穷小时:

    我们将其进行强转即可。

代码实现

class Solution 
{
public:
    double myPow(double x, int n) 
    {
        //注意判断是否为负数以及数据溢出进行强转
        return n<0?1.0/pow(x,-(long long)n):pow(x,n);
    }
    double pow(double x,long long n)
    {
        //递归出口:
        if(n==0)
        return 1.0;
        //保存值
        double tmp=pow(x,n/2);
        //判断是否除尽
        return n %2 ==0?tmp*tmp:tmp*tmp*x;
    }
};
相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
36_T5与编码器-解码器架构
T5(Text-to-Text Transfer Transformer)是由Google Research于2019年提出的一种革命性的预训练语言模型。它的核心创新在于提出了一种统一的框架,将所有自然语言处理(NLP)任务都转换为文本到文本的格式,即输入和输出都是文本序列。
|
8月前
|
监控 网络协议 网络虚拟化
动态主机配置协议(DHCP)中的中继机制及其配置方法
最后,值得注意的是,DHCP中继代理的配置必须谨慎和精确,因为不当的设置可能导致整个网络的IP地址分配出现故障。因此,配置中继代理之前应充分规划,并在实施新的配置时进行仔细的监控和测试。
270 11
|
8月前
|
XML Java 数据安全/隐私保护
抖音卡片生成器在线制作,抖音xml卡片链接生成器,私信群发卡片消息
这个项目实现了完整的抖音XML卡片生成功能,包含模板管理、数据绑定、XML验证等核心模块。
|
11月前
|
数据可视化 安全
医疗卫生信息管理“轻数字化”,为什么越来越多机构选了二维码?
在医疗卫生行业,信息管理至关重要。然而,许多医院面临“上系统”成本高和“靠纸张”效率低的两难困境。草料二维码作为一种“轻量、灵活、低门槛”的数字化工具,通过二维码技术解决医疗管理中的琐碎问题。它广泛应用于设备资产管理、消毒记录、健康宣教、就医引导和教学培训等场景,无需系统对接,快速落地,灵活调整,让现场信息真正可追踪、可汇总、可管理,推动医疗信息化走向“细节落地”。
289 24
|
边缘计算 运维 安全
出海浪头之上,共探CDN进化新支力
出海浪头之上,共探CDN进化新支力
223 0
|
算法 C语言
【数据结构】快速排序(4种方式实现)
【数据结构】快速排序(4种方式实现)
578 1
|
存储 搜索推荐 索引
排序算法 - 快速排序(4种方法实现)
排序算法 - 快速排序(4种方法实现)
429 0
Java邮箱地址无效导致群发邮件失败的解决方案
Java邮箱地址无效导致群发邮件失败的解决方案
|
网络协议 搜索推荐 Java
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)(上)
网络编程【TCP单向通信、TCP双向通信、一对多应用、一对多聊天服务器】(二)-全面详解(学习总结---从入门到深化)
651 2

热门文章

最新文章