递归的简单用法及思考

递归的简单用法

题目

分别输出1-i辆公交车出站不同顺序的情况总数;(公交车进出站遵循先进先出原则)

代码如下

package com.hzc.bluecap;

import java.util.Scanner;

public class BusOutbound {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入车辆总数");
		int i=sc.nextInt();
		busOutbound(i);
	}

	private static void busOutbound(Integer i) {
		// TODO Auto-generated method stub
		for (int j = 1; j < i+1; j++) {
			System.out.println(j+":"+outboundCount(j));
		}
	}

	private static Integer outboundCount(Integer i) {
		// TODO Auto-generated method stub
		
		return outboundCount(i,0);
	}

	private static Integer outboundCount(Integer i, int j) {
	//i为待进站数量
	//j为站中数量
		// TODO Auto-generated method stub
		if(i==0)return 1;
		if(j==0)return outboundCount(i-1,1);
		return outboundCount(i-1, j+1)+outboundCount(i,j-1);
	}

}

解题步骤

此题是在b站看到的,原视频链接: https://www.bilibili.com/video/BV1tt41177mu?p=11
下面是个人理解
1.题目分析:由题目可知当所有车都在车站时只有一种出站情况,出站情况的区别在当车站有车时的进站再出和直接出站两种情况
2.递归方法使用:根据题目很容易想到用递归,递归的思想是将一大块化为一小块在进行分步解决,其中较为重要的是部分之中的联系,根据视频中的想法使用一个参数找不到规律可能是参数不够,再根据题目分析中待进站车辆数、站中车辆数的关系可得出两个参数,返回条件是当待进站的车辆为零时就返回1,考虑到站中可能为零的情况所以还要加一个判断当车站中为零时就从待进站的车辆中开一辆进站,出站的可能情况为直接从车站出去和先进站在出站的总和,最后再将总数返回,outboundCount(Integer i)方法是为了和两个参数进行联系;

总结

求不同顺序或者不同步骤总数这一类的算法题目可以优先考虑递归
递归得先有两个条件,各部分的关系和最终的返回值;(没有返回值会报栈溢出错误)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值