文章目录
-
递归
-
- 1.初始递归
-
2.递归的应用
-
- 1.数列求和
-
2.任意进制转换
-
3.递归调用的实现
-
4. 递归可视化 分形树
================================================================
-
递归使用的是分治策略
-
递归是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题,持续分解,直到问题规模小到可以用非常简单直接的方式来解决。递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身。
-
初识递归 : 数列求和
数列的和=“ 首个数” +“ 余下数列” 的和
如果数列包含的数少到只有1个的话,它的和就是这个数了
def listsum(numList):
if len(numList) == 1:
return numList[0]
else:
return numList[0] + listsum(numList[1:])
- 递归“三定律”
1,递归算法必须有一个基本结束条件(最小规模问题的直接解决)
2,递归算法必须能改变状态向基本结束条件演进(减小问题规模)
3,递归算法必须调用自身(解决减小了规模的相同问题)
1.数列求和
数列的和=“ 首个数” +“ 余下数列” 的和
def listsum(numList):
if len(numList) == 1:
return numList[0]# 最小规模
else:
return numList[0] + listsum(numList[1:])
#调用自身减小规模
2.任意进制转换
def toStr(n,base):
convertString = “0123456789ABCDEF”
if n<base:
return convertString[n] # 最小规模
else:
return toStr(n//base,base) + convertString[n%base]
#调用自身减小规模
- 当一个函数被调用的时候,系统会把调用时的现场数据压入到系统调用栈
• 每次调用,压入栈的现场数据称为栈帧
• 当函数返回时,要从调用栈的栈顶取得返回地址
• 恢复现场,弹出栈帧,按地址返回
- 在调试递归算法程序的时候经常会碰到这样的错误:RecursionError(超过递归深度限制)
递归的层数太多,系统调用栈容量有限
这时候要检查程序中是否忘记设置基本结束条件,导致无限递归
或者向基本结束条件演进太慢,导致递归层数太多,调用栈溢出
- 在Python内置的sys模块可以获取和调整最大递归深度
print(sys.getrecursionlimit())
sys.setrecursionlimit(3000)
print(sys.getrecursionlimit())
结果:
1000
3000
- recursion:递归
- Python的海龟作图系统turtle module基础
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
9f49b566129f47b8a67243c1008edf79.png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
![img](https://i-blog.csdnimg.cn/blog_migrate/0120875fac9a1970beeb4861b0ee436c.jpeg)