数据结构-栈逆序
案例三:
实现一个栈的逆序,但是只能用递归函数和这个栈本身的操作来实现,而不能自己申请另外的数据结构(from直通bat)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public int get(Stack<Integer> stack){ int result = stack.pop; if(stack.isEmpty()){ return result; }else{ int last = get(stack); stack.push(result); return last; } }//该函数功能为,移除栈底元素并返回 public void reverse(Stack<Integer> stack){ if(stack.isempty()){ return ; } int i = get(stack); reverse(stack); stack.push(i); } //get方法为,把栈底元素删除并返回功能。 //以上代码为,把栈中元素逆序的主方法。 //回忆视频中调用过程的图示分析,加强理解!!
重新理解递归:
流程是什么,递归思路(分治思路)。
递归的确是把大问题化成小问题,但是在化的过程中牵涉到一种分治的思想。
终止条件:什么情况下问题不需要划分了。
如何理解递归行为?系统上如何实现?
一开始,主函数。
我的这个参数指望着我的子过程给我返回。
递归函数就是系统在帮你压栈的理解:
函数所有信息压到栈里(跑到第几行,所有参数和变量),然后调用子过程,之前的过程全在栈里。
怎么接着跑?拿出栈顶函数的所有信息(还原现场)接着跑,参数接住了子过程的返回值。
逻辑概念上的解释,系统上的实现,递归函数不是玄学,递归函数是有实际落地的结构的。
一个函数调用子过程之前会把自己的所有过程全部压到栈里去,信息完全保存;
子过程返回之后,会利用这些信息彻底还原现场,继续跑;
最后串起来所有子过程,跟父过程通信。
任何递归行为都可以改成非递归。递归变迭代。
用压栈过程去分析。
打到一切牛鬼蛇神!
93-108min-初级班1