`

几个JAVA递归实例

    博客分类:
  • java
阅读更多

引自: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 递归问题文档

    在Java中,递归的使用需要注意以下几点: 1. **堆栈溢出**:由于每次函数调用都会在内存堆栈中分配空间,过多的递归调用可能导致堆栈溢出错误。因此,确保递归深度在合理范围内是很重要的。 2. **效率**:递归虽然...

    java 递归实现地图最短路径

    在给定的代码中,有以下几个关键部分: - **城市路线对象(Way)**:包含了两个城市名(from和to)以及它们之间的成本(cost)。 - **地图数据结构(Map)**:使用HashMap存储所有城市及其相邻城市的路线。键是...

    JAVA编程(递归典型题目)

    本文将详细解析几个典型的JAVA编程递归题目,包括阶乘计算、摘桃子问题、斐波那契数列以及汉诺塔问题,通过实例代码分析递归的应用与实现。 #### 1. 阶乘计算 阶乘是数学中的一个基本概念,表示为`n!`,其定义为...

    java写的递归建树型结构

    在给定的标题“java写的递归建树型结构”和描述“java写的从数据库中提取数据,用变量创建树型结构”中,我们可以深入探讨以下几个关键知识点: 1. **树型结构**:树是一种非线性数据结构,由节点(或顶点)和边...

    Java方法递归调用实例解析

    Java方法递归调用实例解析是Java编程中的一种重要概念,指的是一个方法可以调用自身,以解决问题。递归调用可以用于解决一些复杂的问题,但是需要注意递归的使用,因为递归可能会导致栈内存溢出错误。 什么是递归?...

    java递归算法实例分析

    现在,我们来看两个具体的Java递归算法实例: **实例1:递归打印1~100** 在这个例子中,`testCursion01`方法通过递归调用自身来打印数字1到100。递归头是`if (i )`,当i的值超过100时,递归结束。这个实例展示了...

    Java基础编程实例

    在这个“Java基础编程实例”中,我们将会探讨几个关键的数学概念以及它们在Java编程中的应用,包括“完数”、质因数分解以及递归与循环等。 首先,让我们来理解“完数”的概念。完数是指一个正整数,它的所有真因子...

    java实现递归菜单树

    这里展示了几个示例数据,如“系统管理”、“轨迹查询”等,它们都是顶级菜单,而“用户信息”、“设备信息”等则是子菜单。 接下来,我们需要编写一个方法来构建菜单树。这个方法通常接收一个菜单列表(根据数据库...

    Java递归算法详解(动力节点整理)

    6. **递归实例:斐波纳契数列**:斐波纳契数列是一个很好的递归算法示例,其中每个数是前两个数的和。在Java代码中,`fab` 方法通过检查 `index` 是否等于1或2来确定是否到达递归出口,如果不是,则继续递归计算前两...

    Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    下面是一个Java递归实现未知维度集合的笛卡尔积的示例代码: ```java private static void recursive (List<List<String>> dimValue, List<List<String>> result, int layer, List<String> curList) { if (layer ...

    java范例开发大全

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...

    5·5递归算法,递归思想

    在Java中,递归通常涉及到以下几个核心概念: 1. **基础情况(Base Case)**:这是递归算法的终点,一个没有继续进行递归调用的情况。如果没有明确的基础情况,递归将无限进行,导致栈溢出错误。 2. **递归情况...

    java初级编程实例(几十个小程序)

    这个压缩包中包含了几十个小程序,涵盖了各种算法和实现,为初学者提供了丰富的学习资源。接下来,我们将逐一探讨这些实例可能涉及的Java编程知识点。 1. **conect**: 这个程序可能涉及到网络编程,如Socket编程,...

    冒泡排序和递归求和实现

    递归是一种解决问题的方法,它解决问题的各个部分,而这些部分又是相同问题的规模较小的实例。在计算求和问题中,递归通常涉及到将总和分为两个部分:一部分是第一个数字,另一部分是剩余数字的总和。递归求和的基线...

    JAVA上百实例源码以及开源项目源代码

    数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的...

    栈递归.rar

    在这个"栈递归.rar"压缩包中,包含了几个与栈和递归相关的Java源代码文件,让我们逐一解析它们。 首先,我们有"LinkStack.java.bak"和"LinkStack.java",这两个文件很可能是同一个链式栈类的不同版本。链式栈是一种...

    Java实例-数据结构(学习资料)

    在这个实例中,我们将探讨几个关键的数据结构及其在Java中的实现,包括数字求和、链表操作、堆栈和队列的应用。 首先,我们来看数字求和运算的例子。这个实例使用do...while循环计算0到100之间的所有整数之和。`do....

    40个Java算法与数组方面的源码实例集.rar

    40个Java算法与数组方面的源码实例集,这些代码都是比较简单,觉得很实用,有算法、数组、打印出杨辉三角形、求1 2! 3! ... 20!的和、递归方法实例、利用递归方法求阶乘之和、判断大小排序、球从100米高度自由落下,...

    典型合并算法可运行Java实例

    这个Java实例展示了如何将理论上的合并排序算法转化为实际的代码实现,通过理解并实践这个代码,可以深入理解合并排序的工作原理和实现细节。同时,这也是一个可运行的实例,可以直接在Java环境中编译和执行,验证...

Global site tag (gtag.js) - Google Analytics