前言:今天学习了递归,班上有些同学可能有疑惑,究竟什么是递归,有句玩笑是:”当你学会了递归,你就学会了递归“,本质上,其实这个就是将宏观的问题细化,我们在做题的时候,首先应该先考虑需要解决的问题是什么,比如我们要搭积木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的编程小白,也是初次学习总结,本文内容仅供参考
本文仅供个人学习记录,欢迎交流
// 如有疑问欢迎交流,如有错误感谢指正