1.递归打印
public void print(int i){
//终止条件必须在最开始的地方
if(i>0){
System.out.println(i);
print(i-1);
}
}
2.阶乘
public int jiecheng(int i){
//终止条件:i=1
if(i==1){
return 1;
}else{
return i*jiecheng(i-1);
}
}
3.斐波那契数列
//这种数列:1 1 2 3 5...每项都是前两项之和
public int Febonacci(int i){
if(i==1 || i==2){
return 1;
}else{
return Febonacci(i-1)+Febonacci(i-1);
}
}
4.汉诺塔问题
有n个盘子,三根柱子:初始柱子1,中间柱子2,目标柱3。
// 要把n个盘子按从下往上的顺序,从初始柱子借助中间柱子移到目标柱子
//思想:只用考虑两个盘子:当前需要移动的盘子,和上面的那个盘子
public void hanoi(int n,char start, char mid, char fin){
//终止条件(顶层):只有一个盘子要移动
if(n==1){
System.out.println("将第"+n+"个盘子从"+start+"移动到"+"fin");
}else{
//正在移动第n个盘子。将它上面的那个盘子移动到中间柱(上面的那个移动了代表上面的全部盘子都已经被移动好了)
//此时移动顺序为132
hanoi(n-1,start,fin,mid);
//把第n个盘子移动到目标柱
System.out.println("将第"+n+"个盘子从"+start+"移动到"+"fin");
//将上面的盘子从中间柱移动到目标柱
//此时移动顺序为213
hanoi(n-1,mid,start,fin);
}
}
5.辗转相除法求最大公约数
辗转相除法:被除数与除数的最大公约数,就是除数与余数的最大公约数。
public int gcd(int m, int n){
if(m%n == 0){
return n;
}else{
return gcd(n,m%n);
}
}