递归专题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..下期要讲解的内容是

计算布尔二叉树的值

下期见。

相关推荐
Gigavision12 分钟前
CAS(ME)²数据集 感知图卷积网络算法 CAS(ME)²数据集下载
网络·算法
爱吃提升25 分钟前
Dev-C++ 5.11 完整版快捷键大全(信奥/初学适用)
c语言·c++
杜 硕31 分钟前
快速排序02
算法·排序算法
careathers38 分钟前
【数据结构】二叉树拓展
数据结构·算法
java_nnnn1 小时前
LeetCode刷题滑动窗口(长度最小的子数组)
算法·leetcode·职场和发展
@atweiwei1 小时前
训练 AI 大模型系列之 LoRA:不动模型本体,靠一条低秩旁路改专长(附完整手算算例)
人工智能·算法·ai·语言模型·rag
andrsted1 小时前
练题簿在线免费刷题:Excel、CSV 批量导题与章节整理,把现成表格变成日常题库
学习·微信小程序·小程序·刷题·在线刷题
yi0111 小时前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
9624561 小时前
餐饮 SaaS 优惠券系统架构演进(七)营销定价引擎设计:活动、会员价、优惠券、买赠如何在同一 PriceQuote 中可解释地组合
java·运维·算法
SWAGGY..1 小时前
【C++进阶】:(10)哈希表的原理与实现——从哈希函数到哈希桶
c++·哈希算法·散列表