Java递归练习

 1 /*
 2  *
 3  * 描述:每 3 个可乐盖可兑换 1 瓶子可乐,求买 n 瓶可乐最终可获得的可乐瓶子数。
 4  *
 5  *
 6  * */
 7
 8 import java.util.Scanner;
 9
10 public class Digui {
11     public static int times = 1;
12
13     public static void main(String[] args){
14         Scanner input = new Scanner(System.in);
15         System.out.print("输入购买的可乐数:");
16
17         times = 1;
18
19         int j = input.nextInt();
20         int i = func(j);
21
22         System.out.println("--------------------------");
23         System.out.println("总共可获得 " + i + " 瓶\n\n");
24     }
25
26     public static int func(int i){
27         if(i < 3){
28             System.out.println("最终剩下 " + i + " 个瓶盖,不足以兑换");
29             return i;
30         }
31         else{
32             System.out.println("第 " + times++ + " 次兑换," + "本次兑换总共有 " + i + " 个瓶盖,用 " + (i - i%3) + " 个瓶盖换了 " + i/3 + " 瓶可乐,剩余 " + i%3 + " 个瓶盖可用于下次兑换");
33             return ((i - i%3) + func(i/3 + i%3));
34         }
35     }
36 }

运行结果

输入购买的可乐数:24
第 1 次兑换,本次兑换总共有 24 个瓶盖,用 24 个瓶盖换了 8 瓶可乐,剩余 0 个瓶盖可用于下次兑换
第 2 次兑换,本次兑换总共有 8 个瓶盖,用 6 个瓶盖换了 2 瓶可乐,剩余 2 个瓶盖可用于下次兑换
第 3 次兑换,本次兑换总共有 4 个瓶盖,用 3 个瓶盖换了 1 瓶可乐,剩余 1 个瓶盖可用于下次兑换
最终剩下 2 个瓶盖,不足以兑换
--------------------------
总共可获得 35 瓶
时间: 2024-10-11 16:04:10

Java递归练习的相关文章

JAVA递归、非递归遍历二叉树(转)

原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c) { date = c; } // 先序遍历递归 public static void preOrder(BinTree t) {

欧几里得求最大公约数--JAVA递归实现

欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: 1 public class Demo0 { 2 public static void main(String[] args) { 3 4 System.out.println(gcd(24,120)); 5 } 6 7 8 public static int gcd(int p,int q){ 9 10 if(q==0)

java——递归调用

递归调用是调用自身的函数,并传给自身的相应的参数,这一运算过程是一层层的进行的,直到满足一定条件时,才停止调用. 递归函数的特点 1.函数要直接或间接调用自身. 2.要有递归终止条件检查,即递归终止的条件被满足后,则不再调用自身函数. 3.如果不满足递归终止的条件,则调用涉及递归调用的表达式.在调用函数自身时,有关终止条件的参数要发生变化,而且需向递归终止的方向变化. 举例: 计算5的阶乘? public class TestWudejiecheng { public static void m

JAVA递归删除目录及包含的全部文件

JAVA递归删除目录及包含的全部文件/** * 递归删除某一个目录 * @param objDir 目标目录文件 * @return 是否删除成功,true为成功 */ public static boolean deleteDir(File objDir) { if (objDir.exists()) { File[] dirs = objDir.listFiles(); for (int i = 0; i < dirs.length; i++) { if (dirs[i].isDirecto

字符串数组元素排列与组合的Java递归实现

排列与组合的Java递归实现 (参考) 我们在笔试面试过程中经常会遇到关于排列与组合的问题,其实这些可以通过递归简单的实现,看下面两个例子: (1)关于字符串排列的问题 输入一个字符串,打印出该字符串中字符的所有排列.例如输入字符串abc,则输出由字符a.b.c所能排列出来的所有字符串abc.acb.bac.bca.cab和cba. 可以这样想:固定第一个字符a,求后面两个字符bc的排列.当两个字符bc的排列求好之后,我们把第一个字符a和后面的b交换,得到bac,接着我们固定第一个字符b,求后面

Java递归获得TreeJson

联合MyBatis,由Map获取 源码如下 package com.zl.demo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Java递归获取TreeJson * @author ZhangLi * @date 2019年6月18日 上午11:10:45 * @WeiXin zl4828 * @备注 沫沫金原创提供,仅供参考 *

JAVA递归实现线索化二叉树

JAVA递归实现线索化二叉树 基础理论 首先,二叉树递归遍历分为先序遍历.中序遍历和后序遍历. 先序遍历为:根节点+左子树+右子树 中序遍历为:左子树+根节点+右子树 后序遍历为:左子树+右子树+根节点 (只要记住根节点在哪里就是什么遍历,且都是先左再右) 线索化 现在有这么一棵二叉树,它的数据结构由左节点+权+右节点构成. 可以看到4,5,6,7这几个节点的左右节点空间被浪费了.因此,线索化是指有效利用这些空间. 中序遍历的顺序为:4 2 5 1 6 3 7 现在引入前驱节点以及后继节点. 前

java递归删除文件及目录

package base; import java.io.File; public class delete { public static void main(String[] args) { deleteFileAndFoder("../yang"); } static void deleteFileAndFoder(String path){ File f=new File(path); if(f.isDirectory()){//假设是文件夹.先递归删除 String[] li

Java 递归、尾递归、非递归 处理阶乘问题

n!=n*(n-1)! import java.io.BufferedReader; import java.io.InputStreamReader; /** * n的阶乘,即n! (n*(n-1)*(n-2)*...1). * 0!为什么=1,由于1!=1*0!.所以0!=1 * * @author stone * @date 2015-1-6 下午18:48:00 */ public class FactorialRecursion { static long fact(long n) {

Java 递归输出文件

import java.io.File;public class TestAddressSet {************递归输出文件下的所有目录**********    public static void main(String[] args) {        // TODO Auto-generated method stub        File file= new File("E:/张敬轩");        myList(file);    } private sta