您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 汉诺塔递归实现C++算法
问题提出:设有三个塔柱(分别为A号,B号和C号)。初始时,有n个圆盘按自下向上、从大到小的次序叠置在A塔上。现要将A塔上的所有圆盘,借助于B塔,全部移动到C塔上,且仍按照原来的次序叠置。移动的规则如下:这些圆形盘只能在个塔间进行移动,一次只能移动一个盘子,且任何时候都不允许将较大的盘子压在比它小的盘子的上面。要求如下:从键盘输入初始圆形盘子个数n,用C语言实现n个盘子最佳移动的全过程[1]。本题的目的是设计一个盘子移动的方案,使得A号塔上的所有盘子借助于B塔按照原来的次序移动到C塔上,并且,要给出完整的盘子移动的方案。下面我们从递归和非递归两种方面进行考虑[2]。递归解法及其C++实现1.当仅有1个盘子时,把这个盘子从A塔柱移动到C塔柱上2.当圆盘的个数多于1个时,如下解决:(1)先将A塔柱上的(n-1)个圆盘通过C塔柱移动到B塔柱上(2)再将A塔柱上的第n个圆盘直接移动到C塔柱上(3)最后B塔柱上的(n-1)个圆盘通过A塔柱移动到C塔柱上//递归算法求解汉诺塔问题2013年5月5日22:36:31#includeiostream//A为放盘子的珠子,B为中间柱子,C为目标柱子usingnamespacestd;voidhanoi(intn,chara,charb,charc){if(n==1){cout把n号盘子从a-cendl;}else{hanoi(n-1,a,c,b);cout把n号盘子从a-cendl;hanoi(n-1,b,a,c);}}intmain(){intn;cout请输入汉诺塔问题规模:;cinn;charA='a';charB='b';charC='c';hanoi(n,A,B,C);return0;}
本文标题:汉诺塔递归实现C++算法
链接地址:https://www.777doc.com/doc-4681557 .html