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

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


题目来源

本题来源为:

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;
    }
};
相关文章
|
机器学习/深度学习 Java TensorFlow
模型推理脚本
模型推理脚本可以使用各种编程语言编写,如Python、C++、Java等。在机器学习和深度学习领域中,Python是最常用的编程语言之一,因为它有许多流行的深度学习框架,如TensorFlow、PyTorch和Keras,这些框架都提供了简单易用的API来加载模型和进行模型推理。
390 5
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
36_T5与编码器-解码器架构
T5(Text-to-Text Transfer Transformer)是由Google Research于2019年提出的一种革命性的预训练语言模型。它的核心创新在于提出了一种统一的框架,将所有自然语言处理(NLP)任务都转换为文本到文本的格式,即输入和输出都是文本序列。
|
8月前
|
机器学习/深度学习 自然语言处理 搜索推荐
《让机器人读懂你的心:情感分析技术融合奥秘》
情感分析技术正赋予机器人理解人类情绪的能力,使其从冰冷的工具转变为贴心伙伴。通过语音、面部表情和文本等多模态信息,机器人可精准识别情绪并做出相应反应。然而,多模态数据融合、个性化情感理解及自然情感表达仍是技术难点。一旦突破,机器人将在医疗、教育和养老等领域大放异彩,成为患者助手、个性化教师和老人陪伴者,开启人机交互新纪元。这不仅是一次技术飞跃,更是机器人迈向情感世界的深刻变革。
578 0
|
5月前
|
监控 网络协议 网络虚拟化
动态主机配置协议(DHCP)中的中继机制及其配置方法
最后,值得注意的是,DHCP中继代理的配置必须谨慎和精确,因为不当的设置可能导致整个网络的IP地址分配出现故障。因此,配置中继代理之前应充分规划,并在实施新的配置时进行仔细的监控和测试。
209 11
|
8月前
|
数据可视化 安全
医疗卫生信息管理“轻数字化”,为什么越来越多机构选了二维码?
在医疗卫生行业,信息管理至关重要。然而,许多医院面临“上系统”成本高和“靠纸张”效率低的两难困境。草料二维码作为一种“轻量、灵活、低门槛”的数字化工具,通过二维码技术解决医疗管理中的琐碎问题。它广泛应用于设备资产管理、消毒记录、健康宣教、就医引导和教学培训等场景,无需系统对接,快速落地,灵活调整,让现场信息真正可追踪、可汇总、可管理,推动医疗信息化走向“细节落地”。
212 24
|
10月前
|
边缘计算 运维 安全
出海浪头之上,共探CDN进化新支力
出海浪头之上,共探CDN进化新支力
193 0
|
算法 C语言
【数据结构】快速排序(4种方式实现)
【数据结构】快速排序(4种方式实现)
477 1
|
人工智能 前端开发 JavaScript
AI+脚本让我的效率翻倍,你也可以试试
本文分享了一名高级软件工程师如何利用 AI 工具(如 VSCode 插件 Codeium、通义灵码,及网页端的通义千问和 GPT-4)提升工作效率的经验。从代码生成、单元测试、脚本生成到文本润色,再到新框架学习,AI 工具在多个方面显著提高了开发效率和代码质量。文章还提供了具体示例和注意事项,帮助读者更好地应用这些工具。
538 1
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
431 49