为了账号安全,请及时绑定邮箱和手机立即绑定

求各路大神帮忙把n=2时的程序用语言描述走一遍!

求各路大神帮忙把n=2时的程序用语言描述走一遍!

小怪兽爱吃肉 2022-06-14 15:11:24
c语言汉诺塔问题如下:#include <stdio.h>char move (char x, char y);char hanoi(int n,char a, char b, char c);int main(){int n;char a,b,c;a='A';b='B';c='C';scanf("%d",&n);hanoi (n,a,b,c);}char hanoi(int n,char a,char b, char c){if (n==1){ move(a,c); }else { hanoi(n-1,a,c,b);move(a,c);hanoi(n-1,b,a,c);}return;}char move(char x,char y){ printf("%c->%c\n",x,y);}
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

两个盘子,1表示小的,2表示大的。
(第一层)调用hanoi(2,a,b,c), n==1 不满足,执行else子句(进入第二层的调用),
(第二层)调用hanoi(1,a,c,b),此时满足n==1, 执行move(a,c),(因为此时的c为上次调用传进来的b)即将a柱子上1号盘子移动到b柱子上,返回,
(第二层)执行move( a, c),即将a柱子上2号盘子移动到c柱子上,
(第二层)调用hanoi(1,b,a,c),进入函数后满足n==1执行move(a,c),(此时的a为上次传进来的B),所以将b柱子上的1号盘子移动到c柱子上。
只要看清楚对应关系就能搞清楚

查看完整回答
反对 回复 2022-06-20
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

汉诺塔问题是一个递归的经典例子,基本上不用递归不知道如何编程实现。
问题就是从桩子1移到桩子3,借助桩子2.移动N个盘子共移动多少次。
此问题递归解法的解释就是:
先从1移到2,借助3,移动N-1个盘子。此时1上还有一个盘子。即 hanoi(n - 1, one, three, two);
可以直接将一个盘子移到3 move(one, three);
然后将剩余的在2上的N-1个盘子移到3上,借助1 hanoi(n - 1, two, one, three);
这里的1、2、3对应你上面的代码就是ABC

查看完整回答
反对 回复 2022-06-20
  • 2 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信