递归的作用
- 替代多重循环
- 解决本来就是用递归形式定义的问题
- 将问题分解为规模更小的子问题进行求解
阶乘
public static int Factorial(int n){
int m;
if (n==0){
m=1;
}else{
m=n*Factorial(n-1);
}
return m;
}
汉诺塔
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小
不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移
到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子
始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动
的步骤。
public static void main(String[] args) {
Scanner reader=new Scanner(System.in);
int n=reader.nextInt();
char a=reader.next().charAt(0);
char b=reader.next().charAt(0);
char c=reader.next().charAt(0);
Hanoi(n,a,c,b);//将n个盘子从sta移到des
}
public static void Hanoi(int n, char sta, char des, char mid) {
if (n == 1) {
//最上方盘子编号为n
System.out.println(n+":"+sta + "->" + des + " ");
return;
}
Hanoi(n-1,sta,mid,des);//先将n-1个盘子从sta移到Mid,通过des
System.out.println(n+":"+sta + "->" + des + " ");//再将第N个盘子从sta移到des
Hanoi(n - 1, mid, des, sta);//再将n-1个盘子从mid移到des,通过sta
}
输入
3 a b c
输出
1:a->c
2:a->b
1:c->b
3:a->c
1:b->a
2:b->c
1:a->c