引自:http://blog.csdn.net/kkkkkxiaofei/article/details/8333644
package test.digui; /** * 所谓递归就是自己调用自己,调用需要有一个出口,否则就成为死循环了。递归和for循环的主要区别是,递归的调用有自己的stack * 而for的lOOP调用共享stack, 另外递归最里层的方法最先执行完成才逐渐返回执行外层的方法(类似于spring的拦截器模式) * * @author LXL * */ public class TestDiGui { public static void main(String[] args) { int result = 0; // result = getAddNum(10); // System.out.println(result); // decimalToBinary(10); // System.out.println(sb.toString()); // gongyueshu(15, 21); hanon(3,'a','b','c'); } /** * num以内的数字求和 * * @param num * @return */ public static int getAddNum(int num) { if (num == 0) { return num; } else return num + getAddNum(num - 1); } static StringBuilder sb = new StringBuilder(); /** * 十进制转成二进制 * * @param num */ public static void decimalToBinary(int num) { if (num == 0) { return; } else { decimalToBinary(num / 2); // System.out.print(num%2); sb.append(num % 2); } } /** * 求两个数的最大公约数 * * @param num */ public static void gongyueshu(int num1, int num2) { if (num1 == num2) { System.out.println(num1); } else { gongyueshu(abs(num1 - num2), min(num1, num2)); } } /** * 求两个数的最小的数 * * @param num */ public static int min(int num1, int num2) { return num1 > num2 ? num2 : num1; } /** * 求绝对值 * * @param num */ public static int abs(int num) { return num > 0 ? num : -num; } /** * 递归方法hanon,求汉诺塔算法 * * @param num */ public static void hanon(int n, char a, char b, char c) { if (n == 1) { move(1, a, c);// 最后一种情况是,把A柱子上盘子移到C柱子上。 return; } hanon(n - 1, a, c, b); // 递归,把n-1个盘子从A 盘上借助C盘移到B盘上 move(n, a, c);// 调用move()方法 hanon(n - 1, b, a, c);// 递归,把把n-1个盘子从B盘上借助A盘移到C盘上 } public static void move(int n, char a, char c) { System.out.println(n + ":" + a + "-->" + c);// 打印移动盘子情况 } }
相关推荐
在Java中,递归的使用需要注意以下几点: 1. **堆栈溢出**:由于每次函数调用都会在内存堆栈中分配空间,过多的递归调用可能导致堆栈溢出错误。因此,确保递归深度在合理范围内是很重要的。 2. **效率**:递归虽然...
在给定的代码中,有以下几个关键部分: - **城市路线对象(Way)**:包含了两个城市名(from和to)以及它们之间的成本(cost)。 - **地图数据结构(Map)**:使用HashMap存储所有城市及其相邻城市的路线。键是...
本文将详细解析几个典型的JAVA编程递归题目,包括阶乘计算、摘桃子问题、斐波那契数列以及汉诺塔问题,通过实例代码分析递归的应用与实现。 #### 1. 阶乘计算 阶乘是数学中的一个基本概念,表示为`n!`,其定义为...
在给定的标题“java写的递归建树型结构”和描述“java写的从数据库中提取数据,用变量创建树型结构”中,我们可以深入探讨以下几个关键知识点: 1. **树型结构**:树是一种非线性数据结构,由节点(或顶点)和边...
Java方法递归调用实例解析是Java编程中的一种重要概念,指的是一个方法可以调用自身,以解决问题。递归调用可以用于解决一些复杂的问题,但是需要注意递归的使用,因为递归可能会导致栈内存溢出错误。 什么是递归?...
现在,我们来看两个具体的Java递归算法实例: **实例1:递归打印1~100** 在这个例子中,`testCursion01`方法通过递归调用自身来打印数字1到100。递归头是`if (i )`,当i的值超过100时,递归结束。这个实例展示了...
在这个“Java基础编程实例”中,我们将会探讨几个关键的数学概念以及它们在Java编程中的应用,包括“完数”、质因数分解以及递归与循环等。 首先,让我们来理解“完数”的概念。完数是指一个正整数,它的所有真因子...
这里展示了几个示例数据,如“系统管理”、“轨迹查询”等,它们都是顶级菜单,而“用户信息”、“设备信息”等则是子菜单。 接下来,我们需要编写一个方法来构建菜单树。这个方法通常接收一个菜单列表(根据数据库...
6. **递归实例:斐波纳契数列**:斐波纳契数列是一个很好的递归算法示例,其中每个数是前两个数的和。在Java代码中,`fab` 方法通过检查 `index` 是否等于1或2来确定是否到达递归出口,如果不是,则继续递归计算前两...
实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...
下面是一个Java递归实现未知维度集合的笛卡尔积的示例代码: ```java private static void recursive (List<List<String>> dimValue, List<List<String>> result, int layer, List<String> curList) { if (layer ...
在Java中,递归通常涉及到以下几个核心概念: 1. **基础情况(Base Case)**:这是递归算法的终点,一个没有继续进行递归调用的情况。如果没有明确的基础情况,递归将无限进行,导致栈溢出错误。 2. **递归情况...
这个压缩包中包含了几十个小程序,涵盖了各种算法和实现,为初学者提供了丰富的学习资源。接下来,我们将逐一探讨这些实例可能涉及的Java编程知识点。 1. **conect**: 这个程序可能涉及到网络编程,如Socket编程,...
递归是一种解决问题的方法,它解决问题的各个部分,而这些部分又是相同问题的规模较小的实例。在计算求和问题中,递归通常涉及到将总和分为两个部分:一部分是第一个数字,另一部分是剩余数字的总和。递归求和的基线...
在这个"栈递归.rar"压缩包中,包含了几个与栈和递归相关的Java源代码文件,让我们逐一解析它们。 首先,我们有"LinkStack.java.bak"和"LinkStack.java",这两个文件很可能是同一个链式栈类的不同版本。链式栈是一种...
在这个实例中,我们将探讨几个关键的数据结构及其在Java中的实现,包括数字求和、链表操作、堆栈和队列的应用。 首先,我们来看数字求和运算的例子。这个实例使用do...while循环计算0到100之间的所有整数之和。`do....
40个Java算法与数组方面的源码实例集,这些代码都是比较简单,觉得很实用,有算法、数组、打印出杨辉三角形、求1 2! 3! ... 20!的和、递归方法实例、利用递归方法求阶乘之和、判断大小排序、球从100米高度自由落下,...
这个Java实例展示了如何将理论上的合并排序算法转化为实际的代码实现,通过理解并实践这个代码,可以深入理解合并排序的工作原理和实现细节。同时,这也是一个可运行的实例,可以直接在Java环境中编译和执行,验证...
从这两个示例中,我们可以了解到以下几个知识点: 1. Java中 File 类的使用:File类是Java.io包下的一个类,它代表了文件和目录路径名的抽象表示形式。通过File类我们可以进行文件的创建、删除、重命名等操作。 2....