java实现递归的几种经典案例(汉诺塔,求阶乘,最大公约数)

1.汉诺塔 

package com.ycit.recursion;

/**
 * @author 江鹏飞
 *	递归实现汉诺塔算法
 */
public class HanNoTa {
	int i = 1;
	public void hanNoTa(int n,char form,char dependOn,char to){
		if(n==1){
			move(1,form,to);
		}else{
			hanNoTa(n-1,form,to,dependOn);//将n-1个盘子从A利用c挪到b
			move(n,form,to); //将最后一个盘子挪到C
			hanNoTa(n-1,dependOn,form,to);//将n-1个盘子从B利用A移到C
		}
	}
	private void move(int n, char form, char to) {
		System.out.println("第"+i+++"步从"+form+"----->"+to);	
	}
	public static void main(String[] args) {
		HanNoTa h = new HanNoTa();
		h.hanNoTa(3, 'A', 'B', 'C');
	}
}

2.求最大公约数

package com.ycit.recursion;

/**
 * @author 江鹏飞
 *	求最大公约数
 *	 (m>n)m和n的最大公约数 = n 和m%n的最大公约数
	 36 24  12 = 24和12 = 12和 0
 */
public class Gcd {
	public int gcd(int m,int n){
		if(n==0){
			return m;
		}else{
			return gcd(n,m%n);
		}
	}
	public static void main(String[] args) {
		Gcd g = new Gcd();
		int gcd = g.gcd(77, 55);
		System.out.println("公约数为:"+gcd);
	}
}

求阶乘

package com.ycit.recursion;

/**
 * @author 江鹏飞
 *	递归法求阶乘
 */
public class CalNFact {
	public long calNfact(long n){
		if(n==1){
			return n;
		}else{
			return n*calNfact(n-1);
		}
		
	}
	public static void main(String[] args) {
		CalNFact c = new CalNFact();
		long n =20;
		long calNfact = c.calNfact(n);
		System.out.println(n+"的阶乘为:"+calNfact);
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值