package com.itheima.d3_recursion;
public class RecursionTest4 {
public static void main(String[] args) {
// 目标:认识递归:做猴子吃桃问题。
// 公式:f(n + 1) = f(n) - f(n) / 2 - 1
// 变形的:
// 2f(n+1) = 2f(n) - f(n) - 2
// f(n) = 2f(n+1) + 2
// 终结点:f(10) = 1
// 问题 f(1) = ?
System.out.println(f(1));
System.out.println(f(2));
System.out.println(f(3));
System.out.println(f(4));
System.out.println(f(5));
System.out.println(f(6));
System.out.println(f(7));
System.out.println(f(8));
System.out.println(f(9));
System.out.println(f(10));
}
public static int f(int n){
if(n == 10){
return 1;
}
return 2*f(n + 1) + 2;
}
}
package com.itheima.d1_test;
public class BeerTest {
public static int totalNumber; // 记录买的总酒数。
public static int lastBottleNumber; // 记录每轮剩余的瓶子
public 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){
// 1、先看money能买多少瓶?
int number = money / 2; // 5
totalNumber += number;
// 2、把瓶子和盖子换算成钱,继续来买酒。
// 算一下总的盖子数和瓶子数。
int allBottleNumbers = lastBottleNumber + number;
int allCoverNumbers = lastCoverNumber + number;
// 换算成总钱,继续来买。
int allMoney = 0;
if(allBottleNumbers >= 2){
allMoney += (allBottleNumbers / 2) * 2;
}
// 计算出本轮剩余的瓶子数。
lastBottleNumber = allBottleNumbers % 2;
if(allCoverNumbers >= 4){
allMoney += (allCoverNumbers / 4) * 2;
}
// 计算本轮剩余的盖子数
lastCoverNumber = allCoverNumbers % 4;
// 判断一下换算的钱是否够2元
if(allMoney >= 2){
buy(allMoney);
}
}
}