汉诺塔c语言递归算法怎么实现

avatar
作者
筋斗云
阅读量:0

汉诺塔问题是一个经典的递归问题,其解法如下:

#include   void move(int n, char a, char b, char c) {     if (n == 1) {         printf("Move disk 1 from %c to %cn", a, c);     } else {         move(n - 1, a, c, b);         printf("Move disk %d from %c to %cn", n, a, c);         move(n - 1, b, a, c);     } }  int main() {     int n;     printf("Enter the number of disks: ");     scanf("%d", &n);     move(n, 'A', 'B', 'C');     return 0; } 

在上面的代码中,move函数是递归的关键,它接受四个参数:n表示当前要移动的盘子数量,a、b、c分别表示起始柱子、中间柱子和目标柱子。当n为1时,直接将盘子从起始柱子移动到目标柱子;当n大于1时,先将n-1个盘子从起始柱子移动到中间柱子,然后将第n个盘子从起始柱子移动到目标柱子,最后将n-1个盘子从中间柱子移动到目标柱子。

通过递归调用move函数,可以解决任意数量的盘子的汉诺塔问题。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!