c语言递归法求汉诺塔,c++汉诺塔问题递归算法
描述:河内塔(Tower of Hanoi)又称河内塔,是一种起源于印度古代传说的益智玩具。梵天创造世界的时候,做了三根钻石柱子,柱子上自下而上叠放了64个黄金圆盘。梵天命令梵天从下面按大小顺序重新排列另一根柱子上的圆盘。此外,还规定在小盘上不能放大盘,一次只能在三列之间移动一个盘。
问题(图解)分析:初始状态:以三个圆盘为例。首先,盘1、2和3都被放置在a柱上。首先,根据规则将磁盘1、2和3移至C柱。
移动步骤:
(1)1:A- C
(2)2:A- B
(3)1:A- B
(4)3:A- C
(5)1:B- A
(6)2:B- C
(7)1:A- C
递归思维:先把2和1看成一个整体,把整体移到B列(借助C列),再把3移到C列;然后将1移到A列(借助C列),将2移到C列;把最后一个1移到C柱上。如图所示:
衍生到n个磁盘:
先把第1 (n-1)个盘看成一个整体,通过C移到B,再把第N (n)个盘移到C;然后,把1的第n-2个圆盘看作一个整体,通过你的C把它移到A,然后把第n-1个圆盘移到C.依此类推,如下所示:
程序描述:主要功能:
用户定义函数1 void hanno (int n,char a,char b,char c)
功能:将a柱上方的N个磁盘移至C柱。
用户定义函数2void Move(int i,char a,char b)
函数:描述将第I个磁盘从A列移动到b列。
代码运行结果n=1
n=1
不会写代码。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。