明确递归语句之前的语句都是顺序执行,而递归语句之后的语句都是逆序执行
package recursion;
import java.util.Stack;
public class Reverse_a_stack_using_recursion {
/*
Input stack:
3
2
1
Output stack:
1
2
3
*/
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
s.push(1);
s.push(2);
s.push(3);
insertAtBottom(s, 4);
System.out.println(s);
reverseStack(s);
System.out.println(s);
}
// 把item插入到栈s的底部
public static void insertAtBottom(Stack<Integer> s, int item) {
if(s.isEmpty()) { // 如果是空栈则可以直接加入
s.add(item);
return;
}
int tmp = s.pop(); // 把栈顶元素保存在tmp,这样就转化为少一个元素的子栈问题
insertAtBottom(s, item);// 递归地把item插入到栈底
s.push(tmp); // 把tmp重新插入到栈顶
}
// 把栈s翻转
public static void reverseStack(Stack<Integer> s) {
if(s.isEmpty()) {
return;
}
int tmp = s.pop(); // 把栈顶元素保存在tmp,这样就转化为少一个元素的子栈问题
reverseStack(s); // 翻转剩下的子栈
insertAtBottom(s, tmp); // 把tmp插入到栈底
}
}
http://www.geeksforgeeks.org/reverse-a-stack-using-recursion/