递归专题5——快速幂

🔥近津薪荼:个人主页

🎬个人专栏:《c语言基础知识详解》《c++基础知识详解》《Linux操作系统及网络基础知识分享》《近津薪荼的算法日迹》

❄️父母是隔在我们和死亡之间的帘子。

你和死亡好像隔着什么在看,没有什么感受,

你的父母挡在你们中间,

等到你的父母过世了,你才会直面这些东西。

------《百年孤独》


1.上期参考代码

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head==nullptr||head->next==nullptr)//注意顺序
        {
            return head;
        }
        ListNode* tmp=swapPairs(head->next->next);
        ListNode* newhead=head->next;
        head->next->next=head;
        head->next=tmp;
        return newhead;
    }
};

2.本期知识点导图

3.本期要讲解的题目是

Pow(x, n)

要点:

  • 快速算出x的n次方
  • 注意防止数据溢出

4.解题:

4.1暴力解法

累乘,循环递归都行,时间复杂度:O(N)

分析过程

我们观察累乘的过程,就拿3的8次幂来举例,暴力解法是累乘8次,需要进行9次运算,不够,我们可以把它拆解成两个3 的四次幂相乘,四次幂再拆成2次幂,2次幂再拆成1次幂,1次幂拆成3与零次幂相乘(考虑n可以等于0)这样我们只需要算4次((lg8/lg2)+1)时间复杂度就变成了O(logN)。

4.2优解:

有上述分析,我们已经有了点思路,我们拿两个例子画个图

我们发现

1.处理过程中会出现两情况:奇数/偶数 次幂,那我们在写递归的时候就需要注意分两种情况讨论

(当然要是想3次幂的话就要讨论3种情况,以此类推,但是2次是最合理的)

2.递归的出口在0次幂

5.总结一下代码逻辑:

最小子问题:求x的n次幂(函数头)

每个子问题需要做什么:求x的n/2次幂,并分情况返回tmp

出口:n==0;

6..下期要讲解的内容是

计算布尔二叉树的值

下期见。

相关推荐
AI科技星9 分钟前
ELN 升级:π 级数自动生成器全域数理架构
大数据·人工智能·python·算法·金融
强盛机器学习~13 分钟前
2026年SCI一区新算法-傅里叶变换优化算法(FTO)-公式原理详解与性能测评 Matlab代码免费获取
算法·matlab·进化计算·群体智能·傅里叶变换·元启发式算法
王老师青少年编程16 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【跳跃与过河问题】:过河问题
c++·算法·贪心·csp·信奥赛·跳跃与过河问题·过河问题
是个西兰花17 分钟前
C++11:智能指针
开发语言·c++·智能指针·rall
CN-Dust35 分钟前
【C++专题】输出cout例题
开发语言·c++
Alice-YUE1 小时前
前端图片优化完全指南:从格式到加载的全面提速方案
前端·笔记·学习
沉默-_-1 小时前
备战蓝桥杯-哈希
c++·学习·算法·蓝桥杯·哈希算法
Reese_Cool1 小时前
【STL】蓝桥杯/天梯赛终极杀器!10个C++字符串核心技巧,暴力破解高频考点
开发语言·c++·蓝桥杯·stl
拼好饭和她皆失1 小时前
基础算法--写给算法小白的模板指南:快速掌握核心代码,蓝桥杯必备模板
算法
吞下星星的少年·-·1 小时前
rotate函数应用模板
算法