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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章