gpt4 book ai didi

c - 不清楚这个汉诺塔递归调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:57 25 4
gpt4 key购买 nike

void TOH(int n,char x,char y,char z);
void main()
{
int n;
printf("nEnter number of plates:");
scanf("%d",&n);
TOH(n,'A','B','C');
getch();
}

void TOH(int n,char x,char y,char z)
{
if(n>0)
{
TOH(n-1,x,z,y);
printf("n%c -> %c",x,y);
TOH(n-1,z,y,x);
}
}

在这个编码中,我对递归调用以及字符和 整数在函数调用中处理,任何人都可以通过简单的演示来解释。

最佳答案

一般来说——要用 n 个盘子解决汉诺塔问题,你应该:

  1. 将n-1个盘子从A移到C
  2. 把A上的单盘移到B上
  3. 将n-1个盘子从C移到B

#1 当塔的顺序为 A、C、B 时,n-1 而不是 n 个板也是同样的问题
#3 当塔的顺序为 A、B、A 时,n-1 而不是 n 个板也是同样的问题

例如:
对于 n = 3
1. 将2个盘子从A移到C
2.将A上的单板移动到B
3.将2个盘子从C移到B

#1 映射到调用 TOH(n-1,x,z,y);
#2 映射到调用 printf("n%c -> %c",x,y);
#3 映射到调用 TOH(n-1,z,y,x);

编辑 - 示例
所以这将是调用的顺序(缩进是递归调用)

  • TOH(3, 'A', 'B', 'C')//将 3 个盘子从 A 移动到 B
    • TOH(2, 'A', 'C', 'B')//将 2 个盘子从 A 移动到 C
      • TOH(1, 'A', 'B', 'C')//将一个盘子从 A 移动到 B
      • 将一个盘子从A移到C
      • TOH(1, 'B', 'C', 'A')//将一个盘子从 B 移动到 C
      • //现在我们在 A 中有 1 个盘子,在 C 中有 2 个盘子
    • 将一个盘子从A移到B
    • TOH(2, 'C', 'B', 'A')//将 2 个盘子从 C 移动到 B
      • TOH(1, 'C', 'A', 'B')//将一个盘子从 C 移动到 A
      • 将一个盘子从C移到B
      • TOH(1, 'A', 'B', 'C')//将最后一个盘子从 A 移动到 B
      • 完成 - 所有板都就位

关于c - 不清楚这个汉诺塔递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18956545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com