java递归解决酒瓶问题

前言:今天学习了递归,班上有些同学可能有疑惑,究竟什么是递归,有句玩笑是:”当你学会了递归,你就学会了递归“,本质上,其实这个就是将宏观的问题细化,我们在做题的时候,首先应该先考虑需要解决的问题是什么,比如我们要搭积木100块积木,那我们不妨考虑前面99块积木已经搭好了,最后一块积木怎么摆上去? 所以我们说,当你学会了递归(你已经搭好了前面99块积木),你就学会了递归(放上最后一块积木),我们现在从下面这个例子来看

补充,对于这个例子可能积木不太好理解,有兴趣可以了解下汉诺塔问题,是比较经典的递归解决问题

酒瓶问题的描述:你有x元钱,已知一瓶酒2块钱,2个空瓶可以再换一瓶钱,4个瓶盖可以再换一瓶酒

*当我们看到这个问题的时候,按照之前我们说的,我们应该先考虑递归最后的情况:也就是:手上的钱不足2元,瓶盖不足3个,空瓶不足2个,把这种情况优先描述出来,这就是设置递归出口,那么有了出口剩下的我们只需要考虑常规情况,假如手上有钱,应该先考虑用钱换酒这种情况;假如手上有空瓶,我们就应该考虑用空瓶换酒;假如手上有瓶盖,我们就要考虑将瓶盖换酒,并且设置一个count计数器,将这三种情况获得的酒记录起来,我们来看下代码 *

package com.zechann.Stream;
public class drink {

    int maxCount = 0;

    public void test01() throws Exception {
        recursion(10, 0, 0, 0);
        System.out.println("总数:" + maxCount);
    }

    public void recursion(int money, int cap, int bottle, int count) {
        //当递归条件不满足的时候,退出递归
        if (cap < 4 && bottle < 2 && money < 2) {
            if (maxCount < count) {
                maxCount = count;
            }
            return;
        }
        //酒瓶盖还能换酒
        if (cap >= 4) {
            recursion(money, cap - 4 + 1, bottle + 1, count + 1);
        }
        //空瓶还能换酒
        if (bottle >= 2) {
            recursion(money, cap + 1, bottle - 2 + 1, count + 1);
        }
        //钱还能换酒
        if (money >= 2) {
            recursion(money - 2, cap + 1, bottle + 1, count + 1);
        }

        return;

    }

}

作为一名初次接触java的编程小白,也是初次学习总结,本文内容仅供参考
本文仅供个人学习记录,欢迎交流
// 如有疑问欢迎交流,如有错误感谢指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值