牢记:递归是为了将原规模为n的问题变成较小的规模来处理
一、使用递归来反转一个栈,不允许生成O(n)空间来处理。
来做几个实例(略),n个数的栈步骤如下:
1. 取栈顶元素pop到temp1
2. 反转n-1个数的栈(规模为n-1,我们认为该较小规模可以处理)
3. 取栈顶元素pop到temp2
4. 反转n-2个元素的栈(当然认为是递归可以帮我们处理好的)
5. 加回temp1(push到栈)
6. 反转n-1个数的栈(我们已经轻车熟路了)
7. 加回temp2(push到栈)完毕!
做实例看看吧,完全正确!
写成程序时,注意一下加入递归的边界条件:在步骤1时若栈为空则递归返回。
关于这道题的一些分析,对理解递归很有帮助:http://johnwaken.is-programmer.com/posts/14471
实现:http://www.cnblogs.com/Jax/archive/2009/12/28/1628552.html
二、同样使用递归实现栈内排序
实现:http://www.cnblogs.com/Jax/archive/2009/12/28/1628552.html
转载于:https://blog.51cto.com/dongdong1314/413788