递归算法中的小Tips
递归算法中的小Tips
- 记忆化
- 尾递归
- 快速幂
递归的基本操作已经在 二叉树的笔记中介绍了。但是在做题的过程中发现,递归还是有一些小技巧的。有时候一般的递归还有可能超出时间限制
记忆化
在递归的过程中,尤其是诸如斐波那契数列的计算过程中,由于递归的树形结构,经常会导致多余的计算量。因此,可以通过先建立一个HashMap将计算过的结果存入,便于后续调用。
诸如爬楼梯这道题,引入res后可以减少很多计算时间
def climbStairs(self, n: int) -> int:res = {}def recur_fib(n):if n in res.keys():return res[n]if n <= 2:res[n] = nelse:res[n] = recur_fib(n-1) + recur_fib(n-2)return res[n]return recur_fib(n)
尾递归
尾递归其实不算是一种小trick,只是一种只在最后返回的时候进行一次的递归方式。
不过,递归过程中可能会存在一些计算变量的迭代。
例如,二叉树的最大深度
ps:判断一棵树是否是BST在每次迭代的时候都要加入low和high,而且不断迭代变换。
快速幂
在进行累乘的时候,显然你可以一次次的累乘
2n=2∗2∗2...∗22^n = 2*2*2...*22n=2∗2∗2...∗2
显然,这样存在很多的冗余计算,简化一下我们可以写成这样
2n=2n/2∗2n/22^n = 2^{n/2}*2^{n/2}2n=2n/2∗2n/2
这样的话,我们可以每次计算的时候直接计算一半即可。
这样,我们可以写出累乘的代码
class Solution:def myPow(self, x: float, n: int) -> float:if n > 0:return self.help(x,n)else:return 1/self.help(x,-n)def help(self,a,b):if b == 0: return 1half = self.help(a,b//2)if b % 2 == 0:return half*halfelse:return half*half*a
递归算法中的小Tips相关推荐
- 项目开发中的小tips
2019独角兽企业重金招聘Python工程师标准>>> 一.泛型通配符:"?" java泛型中,当某种类型不确定时,可以使用未知类型?来代替,在Java集合框架中 ...
- php childnodes,小tips:HTML DOM中的children和childNodes属性
childNodes 属性 标准的,childNodes 属性返回节点的子节点集合,以 NodeList 对象.包括HTML节点,所有属性,文本.可以通过nodeType来判断是哪种类型的节点,只有当 ...
- excel中#N/A的解释同比环比基比画四象限图的小tips字符串截取函数substitute的深入理解
分组分析,同比环比定基比,字符串截取等问题的总结 EXCEL中#N/A,是"不适用"的意思,多用在填写表格的时候,表示"本栏目(对我)不适用",在没有东西可填写 ...
- 本人常用的一些编码小Tips(虽然不多,但很好用)
本人常用的一些编码小Tips 我是可爱的目录 本人常用的一些编码小Tips 一.概述 二.Windows的一些常用的快捷键 (一).Win + others 类型 (二).Alt + others 类 ...
- 小TIPS:合拼gridview的header
http://www.cnblogs.com/jackyrong/archive/2006/08/15/477791.html 小TIPS:合拼gridview的header 在asp.net 2.0 ...
- 不定期备考小tips[数模][0] #20210529
不定期备考小tips[数模][0] #20210529 边值问题 S-L微分方程中两种内积的理解 一种内积:(u,v)=∫uvdx(u,v)=\int uvdx(u,v)=∫uvdx 另一种内积:(u ...
- 前端必备,5大mock省时提效小tips,用了提前下班一小时
一.一些为难前端的业务场景 在我的工作经历里,需要等待后端童鞋配合我的情形大概有以下几种: a.我们跟外部有项目合作,需要调用到第三方接口. 一般这种情况下,商务那边谈合同,走流程,等第三方审核,我们 ...
- 前端防错以及好用小tips指南总结
@前端防錯以及好用小tips指南總結 1.一般情況下我們接收到的都是對象格式,某些情況下,需要接到後端傳過來的奇怪的字符串格式的JSON,需要解析成對象,但是有時候他們傳過來的格式有問題,會報錯 解決 ...
- ANSI编码文件批量转换为UTF-8编码小tips
ANSI编码文件批量转换为UTF-8编码小tips import chardet import os path = "C:\\Users\杜漪漪\Desktop\yunnan" # ...
最新文章
- 华人小哥控诉机器学习四大 Boring!CS 博士:深有同感,正打算退学
- 【深度学习篇】--神经网络中的调优二,防止过拟合
- Java 守护线程概述
- matlab impyramid,图像 – Matlab impyramid问题
- mysql 查看表v空间自增涨_MySQL InnoDB表空间加密
- java 网络编程connection timed out是什么意思_什么?听说这四个概念,很多 Java 老手都说不清...
- jquery 获取键值对中最大值_jQuery的AJAX发送数据键值对
- 谷歌开源漏洞扫描器“海啸”,专为大型企业服务
- vue 怎么设置 项目ico_vue项目如何优雅地设置favicon.ico
- LINUX查看剪贴板有哪些内容
- 数据包络分析法matlab,Matlab学习系列31数据包络分析法(DEA).docx
- call apply bind的作用和区别
- 什么是BI、ETL、DW
- centos环境更换IP地址为静态并且正常联网
- 云课堂软件工程(C编码实践篇)学习之我见
- 多角度解读新兴公链Sui:团队、架构、代币、生态等
- 【王喆-推荐系统】评估篇-(task2)推荐模型评估指标
- redis命令---redist键命令(key)---redis字符串命令(str)
- 微习惯瘦身,一天一个俯卧撑就够了吗?
- MatLab学习笔记(三)--控制语句与函数编程