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);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_40068214/article/details/89433879
今日推荐