1元奶,2空瓶换购问题(递归思维求解java)

题目:1元钱一瓶牛奶,喝完后两个空瓶换一瓶牛奶,问你有N元钱,最多可以喝几瓶牛奶?

递归的本质是将一个大问题分解成若干个小问题,然后通过解决小问题来解决大问题。
在这个问题中,我们需要求解最多可以喝到几瓶牛奶,而可以分解成以下两个小问题:

1.如果现在有x元钱,最多可以买到几瓶牛奶?
2.如果现在有y个空瓶,最多可以换到几瓶牛奶?
对于第一个问题,我们可以通过整除运算来计算当前钱数可以买到的牛奶瓶数。
对于第二个问题,我们可以通过取余运算来计算当前空瓶数可以换到的牛奶瓶数。
然后我们可以通过递归调用来解决问题,具体思路如下:

1.如果当前既没有钱也没有空瓶,则不能买到更多的牛奶,返回0。
2.计算当前钱数可以买到的牛奶瓶数和空瓶数。
3.递归调用函数,将下次可用的空瓶数和剩余的钱数作为参数传入,并将返回值加上当前买到的牛奶瓶数。
4.返回最多可以喝到的牛奶瓶数。

public static int getMaxMilkNumber(int money, int bottleNum) {
        if (money == 0 && bottleNum < 2) { // 没有足够的钱和瓶子时,结束递归
            return 0;
        }
        int milkNum = money; // 可以买的牛奶数量
        int newBottleNum = milkNum + bottleNum % 2; // 新的瓶子数量
        int newMoney = bottleNum / 2; // 剩余的钱数
        return milkNum + getMaxMilkNumber(newMoney, newBottleNum); // 递归调用
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值