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

本专栏内容为:递归,搜索与回溯算法专栏。 通过本专栏的深入学习,你可以了解并掌握算法。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:递归搜索回溯专栏
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

专题一

  • 题目来源
  • 题目描述
  • 算法原理
    • 相同子问题->函数头
    • 只关心每个子问题做了什么->函数体
    • 函数出口
    • 细节问题:
  • 代码实现

题目来源

本题来源为:

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;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为HTTP而生的requests库,纵横江湖难逢敌手

目录 requests是什么安装requests使用requestsGET方法POST方法 requests的相关函数 既然Python是一门全球流行的语言&#xff0c;那么对于网络通信的HTTP的支持肯定也是非常的优秀的。Python中原生的urllib模块也有对HTTP的支持&#xff0c;虽然也可以用来发送 HTTP 请求&#…

Android开发新手入门教程,华为大神花费5个月打造的这份714页学习笔记系列

前言 成为一个专业人士是所有程序员的目标&#xff0c;近几年的工作经历&#xff0c;近距离观察了很多大公司的大佬。有幸与其中的一部分一起工作。在此分享大牛程序员的行为风格以及我自己的所思所想&#xff0c;希望对大家有所帮助。 特此声明&#xff1a;此为我个人主观观点…

python基础第二天

世界杯小组赛成绩 注意&#xff1a; 1.循环 1.1while 1.2for 1.3 range 1.4 while else while 循环正常执行完才能执行else语句

【Linux】磁盘情况、挂载,df -h无法看到的卷

文章目录 解决挂载、解决挂载完重启就消失1、查看linux下的硬盘挂载的空间、使用空间2、查看没有挂载的硬盘是否检测在系统中3、挂载 &#xff08;挂载完&#xff0c;要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了&#xff09; 解决挂载、解决挂载完重启就消失 linu…

推荐一款桌面端redis连接工具, redis desktop manager替代品——another redis desktop manager

下载地址 Another Redis Desktop Manager | 更快、更好、更稳定的Redis桌面(GUI)管理客户端&#xff0c;兼容Windows、Mac、Linux&#xff0c;性能出众&#xff0c;轻松加载海量键值 封面对比 对比redis desktop manager &#xff0c;ui上有巨大的改进 但是redis desktop ma…

授权认证登录之 Cookie、Session、Token、JWT 详解

授权认证登录之 Cookie、Session、Token、JWT 详解 一、先了解几个基础概念什么是认证&#xff08;Authentication&#xff09;什么是授权&#xff08;Authorization&#xff09;什么是凭证&#xff08;Credentials&#xff09; 二、Cookie1、了解 Cookie2、cooker的创建2、coo…

嵌入式面试

1.关键字static的作用是什么&#xff1f;为什么static变量只初始化一次&#xff1f; 1&#xff09;修饰局部变量&#xff1a;使得变量变成静态变量&#xff0c;存储在静态区&#xff0c;存储在静态区的数据周期和程序相同&#xff0c; 在main函数开始前初始化&#xff0c;在退…

【刷题】双指针入门

双指针入门 双指针283.移动零1089. 复写零202. 快乐数11. 盛最多水的容器Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 双指针 双指针是非常经典的算法&#xff0c;包括但…

报错:module ‘collections‘ has no attribute ‘Iterable‘

使用python 高版本&#xff0c;在使用collections遇到报错&#xff1a;module ‘collections’ has no attribute ‘Iterable’ 查了资料 在python3.9 之后collections.Iterable被弃用了。 添加修改语句 collections.Iterable collections.abc.Iterable

保留数据的重装系统教程!(win11系统)

上车警告&#xff01;&#xff01;&#xff01; 本教程无需思考&#xff0c;跟着操作一步一步来就能完成系统的重装。原理是将C盘系统重装&#xff0c;其他盘符数据保存。适用于系统盘重装数据或更改系统版本。 重要提示&#xff01;&#xff01;&#xff01; C盘有重要学习资…

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽 CPP的四大内存分区模型 在 C 中&#xff0c;**内存分区是一种模型&#xff0c;用于描述程序运行时内存的逻辑组织方式&#xff0c;但在底层操作系统中&#xff0c;并不存在严格意义上的内存分区。**操作系统通常将内存分…

太惊艳了!多微信管理利器,让你事半功倍!

作为现代社交媒体的主要平台之一&#xff0c;微信在商务领域中扮演着重要的角色。为了提高我们的工作效率&#xff0c;微信管理系统应运而生。 这个系统可以同时登录多个微信账号&#xff0c;并进行统一管理。除了便捷的登录管理功能外&#xff0c;微信管理系统还提供了许多实…

[Firefly-Linux] RK3399点亮eDP液晶屏并支持触摸

连接方法 EDP 液晶屏模组与主控的连接分为四部分: (1)屏幕背光 (2)EDP 信号 (3)电压跳线 (4)TP 触摸 屏幕背光 屏幕背光的原理图如下: BL_EN 是背光使能引脚,连接到主控的 GPIO1_A1 端口LCD_BL_PWM0 是 PWM 调光引脚,使用主控的 PWM0 端口EDP 信号 EDP 信号的…

秒杀蓝牙!华为“星闪”到底是什么?

2023年8月4日&#xff0c;华为2023HDC大会正式举办&#xff0c;鸿蒙4.0确实很惊艳&#xff0c;流畅与个性齐头并进。 但无人在意的角落&#xff0c;星闪Nearlink的星星之火即将燎原。 大会上余总对星闪一笔带过&#xff0c;众所周知&#xff0c;越不重要出现越少&#xff0c;…

土地利用数据分类过程教学/土地利用分类/遥感解译/土地利用获取来源介绍/地理数据获取

本篇主要介绍如何对影像数据进行分类解译&#xff0c;及过程教学&#xff0c;示例数据下载链接&#xff1a;数据下载链接 一、背景介绍 土地是人类赖以生存与发展的重要资源和物质保障&#xff0c;在“人口&#xff0d;资源&#xff0d;环境&#xff0d;发展&#x…

最强模型Claude 3 Haiku速通指南在此!保姆级教学拿脚都能学会!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…

Hack The Box-Perfection

目录 信息收集 nmap dirsearch gobuster whatweb WEB 信息收集 ffuf 漏洞探索 漏洞发现 模板注入 反弹shell 提权 get user and flag 信息收集 ssh登录&get root and flag 信息收集 nmap 端口探测┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10…

[R] ggplot2 - exercise (“fill =“)

We have made the plots like: Lets practice with what we have learnt in: [R] How to communicate with your data? - ggplot2-CSDN博客https://blog.csdn.net/m0_74331272/article/details/136513694 #tutorial 5 -script #Exercise 1 #1.1# ggplot(smoking_and_drug_use_…

微信小程序开发系列(八)·微信小程序页面的划分以及轮播图区域的绘制和图片的添加

目录 1. 划分页面结构 2. 轮播图区域绘制 3. 轮播图图片添加 1. 划分页面结构 最终我们想达到如下效果&#xff1a; 其页面分为四层结构&#xff0c;因此我们需要配置四块view&#xff0c;代码如下&#xff1a; <!-- view 小程序提供的容器组件&#xff0c;可以当成…

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度&#xff0c;为什么这么说呢&#xff0c;举个例子&#xff1a; 在做分类的训练的时候&#xff0c;如果一个样本属于第K类&#xff0c;那么这个类别所对应的输出节点的输出值应…