用c语言回答:有A、B、C三根柱子A柱子上有64个盘子盘子大小不一小的在上大的在下要求把A柱子上的盘子借助B柱子移到C柱子上仍为小上大下移动规则一次移动一个盘子每移动一次三根柱子上的盘子都是小上大下?
这是经典的“汉诺塔”问题,可以用递归算法来解决。具体步骤如下:
-
如果A柱子上只有一个盘子,直接将它移动到C柱子上。
-
如果A柱子上有n个盘子,先将上面n-1个盘子借助C柱子移动到B柱子上,然后将第n个盘子直接从A柱子移动到C柱子上,最后再将B柱子上的n-1个盘子借助A柱子移动到C柱子上。
递归函数的代码如下:
void hanoi(int n, char from, char to, char via) { if(n == 1) { printf("Move disk %d from %c to %c\n", n, from, to); } else { hanoi(n-1, from, via, to); printf("Move disk %d from %c to %c\n", n, from, to); hanoi(n-1, via, to, from); } }
在主函数中调用hanoi函数即可:
int main() { int n = 64; hanoi(n, 'A', 'C', 'B'); return 0; }
由于盘子数量为64,所以可能需要一些时间来计算
原文地址: http://www.cveoy.top/t/topic/hv3l 著作权归作者所有。请勿转载和采集!