**接上文递归算法
三要素:
- . 规律(公式)
- 终结条件
- 递归方向
非规律递归案例–啤酒问题
需求: 啤酒2元一瓶,4个盖子可以换一瓶,2个空瓶可以换一瓶,请问10元钱可以喝多少瓶酒?剩余多
少空瓶和盖子?
答案:(15瓶 3盖子 1瓶子)
public class RecursionDemo2 {
private static int totalNumber;//总数量
private static int lastBottleNumber;//记录每次剩余的空瓶数
private static int lastCoverNumber;//记录每次剩余的盖子数量
public static void main(String[] args) {
buy(10);
System.out.println("喝酒的总数量"+totalNumber);
System.out.println("剩余的空瓶的数量"+lastBottleNumber);
System.out.println("剩余的盖子的数量"+lastCoverNumber);
}
public static void buy (int money) {
//计算初始状态获得酒的瓶数
int buyNumber=money/2;//计算是5瓶
totalNumber=totalNumber+buyNumber;
//将盖子和瓶子换算成钱
int coverNumber=lastCoverNumber+buyNumber;
int bottleNumber=lastBottleNumber+buyNumber;
//统计可以换的钱
int allMoney=0;
if(coverNumber>=4){
allMoney+=(coverNumber/4)*2;
}
lastCoverNumber=coverNumber%4;
if (bottleNumber>=2){
allMoney+=(bottleNumber/2)*2;
}
lastBottleNumber=bottleNumber%2;
if (allMoney >= 2) {
buy(allMoney);
}
}
}