案例三:
实现一个栈的逆序,但是只能用递归函数和这个栈本身的操作来实现,而不能自己申请另外的数据结构(from直通bat)

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
