如何使用递归函数逆序一个栈

这篇博客介绍了如何利用递归函数实现栈的逆序操作。通过设计两个递归函数,第一个函数用于获取并移除栈底元素,第二个函数则在返回过程中将获取的元素压回栈中,从而达到逆序的效果。内容包括具体的代码实现和操作过程的说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何使用递归函数逆序一个栈

递归函数1

首先,我们需要设计一个能够将栈中的栈底元素返回并移除的递归函数,使用这个函数我们就可以获取到栈底元素并且其他栈中的顺序不变。代码如下:

	public static int getAndRemoveLastElement(Stack<Integer> stack) {
		int res = stack.pop();   //首先获取此时栈顶元素
		if (stack.isEmpty()) {  //递归结束条件,若栈空,则返回
			return res;
		} else {
			int last = getAndRemoveLastElement(stack);    //继续递归执行
			stack.push(res);  //在last返回之后,res是在last之前弹出的那个值,所以要把这个值压回
			return last;    //将栈底的值层层返回
		}
	}

具体过程如下图:
递归函数1

递归函数2

第二个递归函数所要完成的就是逆序栈的操作了,具体思路就是使用递归函数1逐层获取栈底的值,然后递归函数返回时将所获取到的值压回。代码如下:

	public static void reverse(Stack<Integer> stack) {
		if (stack.isEmpty()) {
			return;   //递归结束条件
		}
		int i=getAndRemoveLastElement(stack);  //每次获取栈底的值
		reverse(stack);	    //遇到递归结束条件之后,依次将获取到的值压入
		stack.push(i);
	}

具体过程如下图:
递归函数2

测试函数

	public static void main(String[] args) {
		Stack<Integer> myStack = new Stack<>();
		final int max = 10;
		for (int i = 0; i < max; i++) {
			myStack.push(i);
		}
		reverse(myStack);
		while (!myStack.isEmpty()) {
			System.out.print(myStack.pop() + " ");
		}
	}

这是从左程云左神的书上所学的知识的总结,直接用了左神的图。才疏学浅,若有错误欢迎大家多多提出,定虚心接受。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值