所有的循环算法都可以用递归实现,反之不成立,这足以证明递归的重要性!
Hanoi(汉诺)塔问题。古代有一个焚塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在上,小的在下,有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移到一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上,在移动过程中可以利用B座。输出移动盘子的步骤。
解:由于64个盘子移动步骤太多,本程序以5个盘子为例进行输出
因为手机浏览器显示代码不好看,我会在这里添加代码的图片和代码 以及效果图
图片为:
代码为:
#include "stdio.h"
void hanoi(int n,char A,char B,char C) {
//设置移动盘子的结束条件,如果A当前还有一个盘子那么就把他直接移动到C
if(n == 1) {
printf("%c -> %c\n",A,C);
}else{
//否则开始递归
hanoi(n-1,A,C,B);
printf("%c -> %c\n",A,C);
hanoi(n-1,B,A,C);
}
}
int main() {
//如果有五个盘子,和A,B,C三个柱子,否则开始递归.
hanoi(5,'A','B','C');
}
运行结果:
root@Alan:/home/alan/桌面# ./tim
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
A -> B
C -> B
C -> A
B -> A
C -> B
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
B -> A
C -> B
C -> A
B -> A
B -> C
A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
效果图: