几个JAVA递归实例_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 几个JAVA递归实例

几个JAVA递归实例

 2016/5/12 5:33:31  sky_xin  程序员俱乐部  我要评论(0)
  • 摘要:引自:http://blog.csdn.net/kkkkkxiaofei/article/details/8333644packagetest.digui;/***所谓递归就是自己调用自己,调用需要有一个出口,否则就成为死循环了。递归和for循环的主要区别是,递归的调用有自己的stack*而for的lOOP调用共享stack,另外递归最里层的方法最先执行完成才逐渐返回执行外层的方法(类似于spring的拦截器模式)**@authorLXL**/publicclassTestDiGui
  • 标签:Java 实例 递归

引自:http://blog.csdn.net/kkkkkxiaofei/article/details/8333644

class="java">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);// 打印移动盘子情况
	}

}

?

发表评论
用户名: 匿名