java 递归部分例子


package com.lw.list;


/***
 * f(n)=n+f(n-1)
 * @author liwei
 *
 */
public class 递归Test {


	/***
	 * 方法一
	 * 递归方法DecimalToBinary,把一个十进制数转换成二进制数
	 * @param num
	 */
	public void DecimalToBinary(int num) {
		if (num == 0) { // 当num=0时,循环结束
			return;
		} else {
			DecimalToBinary(num / 2); // 调用递归方法
			System.out.print(num % 2);
		}
	}
	
	/***
	 * 方法二
	 * 递归方法DecimalToBinary1,把一个十进制数转换成二进制数
	 * @param num
	 * @return
	 */
	public String DecimalToBinary1(int num) {
		if (num == 0) { // 当num=0时,循环结束
			return "";
		} else {
			return DecimalToBinary1(num / 2) + Integer.toString(num % 2); // 调用递归方法
		}
	}
	
	/***
	 * 阶乘
	 * 1*2*3*4....n
	 * @param num
	 * @return
	 */
	public int jiecheng(int num) {
		if(num==1) {
			return 1;
		} else {
			return num * jiecheng(num - 1);
		}
	}

	/***
	 * 叠加
	 * 1,2,3...100 依次相加的结果
	 * @param num
	 * @return
	 */
	public int sum(int num) {
		if (num > 0) {
			return num + sum(num - 1);
		} else {
			return 0;
		}
	}
	
	/***
	 * 斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
	 * 这个数列从第三项开始,每一项都等于前两项之和。
	 * @param n
	 * @return
	 */
	public int fib(int n) {
		if (n == 0)
			return 0;
		if (n == 1)
			return 1;
		if (n > 1)
			return fib(n - 1) + fib(n - 2);
		return 0;
	}

	/***
	 * 两个数字的最大公约数
	 * @param num1
	 * @param num2
	 */
	public void yueshu(int num1, int num2) {
		if (num1 == num2) {
			System.out.println(num1); // num1=num2时,结束
		} else {
			yueshu(abs(num1 - num2), min(num1, num2)); // 调用递归方法
		}
	}

	// 求两个数绝对值
	private int abs(int num) { return num > 0 ? num : -num; }

	// 求两个数较小者
	private int min(int num1, int num2) { return num1 > num2 ? num2 : num1; }
	

	public static void main(String[] args) {
		
		递归Test t = new 递归Test();
		
		// 1,2,3...100 依次相加的结果
		System.out.println(t.sum(100));
		// 1*2*3*4...*n
		System.out.println(t.jiecheng(5));
		
		// 两个数字的最大公约数
		t.yueshu(13, 8);
		
		System.out.println(t.fib(4));
		
		// 十进制数转换成二进制数
		t.DecimalToBinary(9);
		
		System.out.println();
		System.out.println(t.DecimalToBinary1(8));
		
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值