首页 > 其他分享 >递归之猴子吃桃、啤酒问题

递归之猴子吃桃、啤酒问题

时间:2022-12-09 21:45:30浏览次数:38  
标签:递归 吃桃 System 猴子 int static println public out

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

相关文章

  • 递归复制文件夹
    packagecom.simon.myfinal;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;/**......
  • java中的递归机制
    本文主要讲述java中的递归机制。示例1,递归代码如下:publicclassRecursion01{publicstaticvoidmain(String[]args){Tt=newT();t.test......
  • oracle中的树型递归的应用
     比如在做一个新闻导航栏时,经常要这样比如:首页>>A>>A1>>A2这样,就是比如点A2这个分类,要显示A2的父亲们的名字,在ORACLE中,很容易办到,主要使用的是STARTWITH...CONNECTBYP......
  • 挂一个猴子
    原文链接:​​SARscape存放sentinel-1精密轨道数据并自动读取​......
  • python 中的递归演示
    递归函数递归就是一个函数在它本身内调用它自己。执行递归函数将反复调用自己,每一次调用就会进入新的一层,递归函数必须要有结束条件。当函数一直递推直到遇到墙后但返......
  • 归并排序(递归+非递归)
    (文章目录)1.归并排序递归1.基本思想主要使用了<fontcolor="blue"size="3">分治思想即大事化小,</font>先使每个子序列有序,子使序列段有序,将两个有序表合并成一......
  • SQLServer CTE 递归查询限制递归级数(完成执行语句前已用完最大递归)
    SQLServerCTE递归查询限制递归级数(完成执行语句前已用完最大递归)介绍如果递归CTE组合不正确,可能会导致无限循环。例如,如果递归成员查询定义对父列和子列返回相同的......
  • 用递归函数实现树形结构转化为列表数据
    题目:  将下面的树结构的数据转化为列表的数据。[{"name":"北京市","code":"11","children":[{"name":"市辖区","code":"1101","children":[{"name":"......
  • 算法-递归&分治
    一、递归0、递归概述为什么要用递归而不用循环:​ 以n的阶乘为例,确实使用循环会更方便,但是使用递归的场景,一般是比较难以确认推导路径的,例如一棵树,要获取所有节点值的和,......
  • js递归的使用
    在js中函数自己调用自己,就称为递归。递归函数的必要条件递归方程以及递归结束条件,即给递归函数安排出口,否则会造成无限递归,无限递归会造成执行栈溢出,浏览器会报错。递归......