设计logo网站推荐,wordpress添加跳转页面模板,购彩网站建设,北京通州住房和城乡建设部网站7-5 汉诺塔的非递归实现 (25 分) 借助堆栈以非递归#xff08;循环#xff09;方式求解汉诺塔的问题#xff08;n, a, b, c#xff09;#xff0c;即将N个盘子从起始柱#xff08;标记为“a”#xff09;通过借助柱#xff08;标记为“b”#xff09;移动到目标柱循环方式求解汉诺塔的问题n, a, b, c即将N个盘子从起始柱标记为“a”通过借助柱标记为“b”移动到目标柱标记为“c”并保证每个移动符合汉诺塔问题的要求。
输入格式: 输入为一个正整数N即起始柱上的盘数。
输出格式: 每个操作移动占一行按柱1 - 柱2的格式输出。
输入样例: 3 输出样例: a - c a - b c - b a - c b - a b - c a - c
这道题用模拟的话正常30行如果用C甚至有人写了200行。 我也没有有想到什么好想法于是找了个大佬代码递归是最简洁的。
#includestdio.h
void hanuo(int n, char a, char b, char c)
{if (n 0)return;hanuo(n - 1, a, c, b);//想要把a-c,就要把上面的a-b;printf(%c - %c\n, a, c);//现在挪动下面的hanuo(n - 1, b, a, c);//然后再把上面的b-c;
}int main()
{int n;scanf(%d,n);hanuo(n, a, b, c);return 0;
}