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