首页
IT
登录
6mi
u
盘
搜
搜 索
IT
专题四-栈与递归
专题四-栈与递归
xiaoxiao
2021-03-26
29
栈与递归
C语言中的疑惑
小A:C语言常说局部变量在栈上分配空间,那么这个地方的栈和我们之前学习的栈数据结构有关系吗?
小B:我觉得应该没有关系吧,只是名称碰巧一致而已吧。
函数调用栈
(1)程序中的“函数调用栈”是栈数据结构的一种应用
(2)函数调用栈一般是从高地址向低地址增长的:栈底为内存的高地址处,栈顶为内存的低地址处。
(3)函数调用栈中存储的数据为活动记录
活动记录(存放于栈空间):
(1)活动记录是函数调用时一系列相关消息的记录
程序中的栈
(1)程序中的栈空间可看做一个顺序栈的应用
(2)栈保存了一个函数调用所需的维护信息:函数参数,函数地址返回;局部变量;函数调用上下文。
什么是程序的栈溢出?
(3)在不断压栈过程中造成栈空间耗尽而产生栈溢出
(4)栈溢出常由于函数递归过深或局部数组过大造成
小结:
(1)程序栈空间在本质上是一种顺序栈
(2)程序栈空间的访问是通过函数调用进行的
(3)程序栈空间仍然遵从后进先出的原则
递归的应用实战一
递归的数学思想
(1)递归是一种数学上分而自治的数学思想
(2)递归将大型复杂问题转化为与原问题相同但规模较小的问题进行处理
(3)递归需要有边界条件:当边界条件不满足时,递归继续进行;当边界条件满足时,递归停止。
递归的数学表示:
递归的一般表示法
手把手教你写代码
斐波拉切数列递归解法
strlen递归解法
汉诺塔问题
全排列递归解法
小结
(1)递归是一种将问题分而自治的思想
(2)用递归解决问题首先要建立递归模型
(3)递归解法必须要有边界条件,否则将死循环。
递归的应用实战二
递归与回溯
(1)递归在程序设计中也常用于需要回溯算法的场合
(2)回溯算法的基本思想:从问题的某一种状态出发,搜索可以到达的所有状态;
当某个状态到达后,可向前回退,并继续搜索其他可到达的状态
当所有状态到达后,回溯算法结束
(3)程序设计中可以利用函数的活动对象保存回溯算法的状态数据,因此可以利用递归完成回溯算法
转载请注明原文地址: https://ju.6miu.com/read-663176.html
技术
最新回复
(
0
)