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); } } }标签:递归,吃桃,System,猴子,int,static,println,public,out From: https://www.cnblogs.com/sisiyibailiu/p/16970071.html