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

   2024-10-13 3990
核心提示:汉诺塔问题是一个经典的递归问题,其解法如下:#include stdio.hvoid move(int n, char a, char b, char c) {if (n == 1) {print

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

#include <stdio.h>void move(int n, char a, char b, char c) {    if (n == 1) {        printf("Move disk 1 from %c to %c\n", a, c);    } else {        move(n - 1, a, c, b);        printf("Move disk %d from %c to %c\n", 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函数,可以解决任意数量的盘子的汉诺塔问题。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号