package 递归;
import java.util.Scanner;
public class 汽水 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入您购买汽水所花的钱");
int money=scan.nextInt();
System.out.println("20元一共能喝"+cal(money,money,money)+"瓶");
}
/**
*
* @param sum 总瓶数
* @param cap 瓶盖数
* @param bottle 瓶子数
* @return
*/
public static int cal(int sum,int cap,int bottle){
int add=cap/3+bottle/2;//每次循环所增加的汽水
sum=sum+add;
System.out.println(sum);
cap=cap%3+add;//每次循环后的瓶盖子
System.out.println(cap);
bottle=bottle%2+add;//每次循环后的瓶子
System.out.println(bottle);
System.out.println("-----------------");
if(cap<3&&bottle<2){//递归结束的条件
return sum;
}else{
return cal(sum,cap,bottle);//递归调用
}
}
}
20元一共能喝113瓶
package test1.test1;
public class Ale {
static int money = 20; // 多少钱
static int per = 1; // 多少钱买一瓶 >0
static int empty = 2; // 多少空瓶换一瓶 >0
static int cap = 3; // 多少瓶盖换一瓶 >0
static int sum = 0; // 总数
public static void main(String[] args) {
for(int i=1;i<=20;i++) {
money = i;
cal(money/per,0,0);
System.out.println(money+"元钱共可以喝:"+sum+" 瓶");
sum = 0;
}
}
/**
* 计算方法
* @param i 换一轮之后还没喝的瓶数
* @param j 空瓶数
* @param k 瓶盖数
*/
public static void cal(int i,int j,int k) {
int i1=0,j1=0,k1=0;
sum += i; // 一开始喝完
j += i;// 喝完后的空瓶数
k += i;// 喝完后的瓶盖数
if(j >= empty) {// 空瓶可以换
i1 += j/empty;
j1 = j%empty; // 换了之后的空瓶数
}else { // 空瓶不能换
j1 = j;
}
if(k >= cap) {// 瓶盖可以换
i1 += k/cap;
k1 = k%cap; // 换了之后的瓶盖数
}else { // 瓶盖不能换
k1 = k;
}
if(i1 >0 || j1 >= empty || k1 >= cap) {
// 如果可以换则继续
cal(i1,j1,k1);
}
}
}
运行结果:
1元钱共可以喝:1 瓶
2元钱共可以喝:5 瓶
3元钱共可以喝:11 瓶
4元钱共可以喝:17 瓶
5元钱共可以喝:23 瓶
6元钱共可以喝:29 瓶
7元钱共可以喝:35 瓶
8元钱共可以喝:41 瓶
9元钱共可以喝:47 瓶
10元钱共可以喝:53 瓶
11元钱共可以喝:59 瓶
12元钱共可以喝:65 瓶
13元钱共可以喝:71 瓶
14元钱共可以喝:77 瓶
15元钱共可以喝:83 瓶
16元钱共可以喝:89 瓶
17元钱共可以喝:95 瓶
18元钱共可以喝:101 瓶
19元钱共可以喝:107 瓶
20元钱共可以喝:113 瓶
39瓶,递归实现如下:
private static int getBottle(int y){
if(y==1) return 1;
else
return getBottle(y-1)+2;
}