上海做网站hlanggroup上海装修公司排行榜
上海做网站hlanggroup,上海装修公司排行榜,备案网站 cdn,营销文案本专栏内容为#xff1a;递归#xff0c;搜索与回溯算法专栏。 通过本专栏的深入学习#xff0c;你可以了解并掌握算法。 #x1f493;博主csdn个人主页#xff1a;小小unicorn ⏩专栏分类#xff1a;递归搜索回溯专栏 #x1f69a;代码仓库#xff1a;小小unicorn的代… 本专栏内容为递归搜索与回溯算法专栏。 通过本专栏的深入学习你可以了解并掌握算法。 博主csdn个人主页小小unicorn ⏩专栏分类递归搜索回溯专栏 代码仓库小小unicorn的代码仓库 关注我带你学习编程知识 专题一 题目来源题目描述算法原理相同子问题-函数头只关心每个子问题做了什么-函数体函数出口细节问题 代码实现 题目来源
本题来源为 Leertcode 50.Pow(x,n) 题目描述
实现 pow(x, n) 即计算 x 的整数 n 次幂函数即xn 。
算法原理
解法一暴力循环 看到这个题很容易就想到暴力解决。 例如2的10次方我们就让循环10次每次进行相乘但这么做肯定会超时。
解法二快速幂
快速幂是一个算法有两种解决办法
递归循环 这里我们讲解递归的方法
例子1316的计算 我们将16次方拆成两个8次方相乘将8次方拆成两个4次方相乘依次内推当数是1次方的时候我们拆成3的0次方。而这个0次方也将作为我们的出口因为0次方在拆也还是0次方。
例子2321 首先将21次方拆成一半除不尽就在多乘以本身这个值依次内推。
分析到这我们其实已经发现这道题相同的子问题了那么就用递归来解决
相同子问题-函数头
本题相同子问题很好分析就是计算xn;
只关心每个子问题做了什么-函数体
那么子问题应该做什么呢
分两步
先计算x的一半次方的值将其保存起来。看这个结果能否被除尽能除尽直接返回不能除尽就在这个值的基础上再乘一个x.
函数出口
写递归一定要写出口防止造成死循环。 本题函数出口就是当n0的时候返回1即可。
细节问题
其实分析到返回值就可以代码实现但是还要注意一下细节问题。 因为n有可能会无穷大也有可能会无穷小或者为负数 当为负数时 我们在计算完结果跟1进行相除变成分数。 当为无穷小时 我们将其进行强转即可。
代码实现
class Solution
{
public:double myPow(double x, int n) {//注意判断是否为负数以及数据溢出进行强转return n0?1.0/pow(x,-(long long)n):pow(x,n);}double pow(double x,long long n){//递归出口if(n0)return 1.0;//保存值double tmppow(x,n/2);//判断是否除尽return n %2 0?tmp*tmp:tmp*tmp*x;}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87955.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!