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