牢记:递归是为了将原规模为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