汉诺塔问题【递归】

coding

汉诺塔问题是一个递归的经典问题。

问题描述:

  有x,y,z三根柱子,在x柱子上有按照大在下,小在上的规则,放着64个套筒,现在要将64个套筒借助柱子y移到柱子z上,且每次只能移动一个套筒,每个柱子上的套筒每时每刻只能按照大套筒在下面,小套筒在上面的规则放着,请问一共要移动多少次才能完成该项任务?

解题思路:

  我们一般会这样想,先把上面63个套筒从x移到y,然后再将第64个从x移到z,最后再将63个从y移动到z,任务完成。

  那么63个套筒怎么移动呢?同样,先把62个套筒从x移到y.。。。。

代码详解:

 1//一共64个盘子

2void hanota(char a, char b, char c,int n) {

3

4if (n == 1)

5 cout << a << "->" << c << endl; //将第64个从a,移到c

6else {

7 hanota(a, c, b, n - 1);//先将上面63个盘子移到b

8 hanota(a, b, c, 1);//然后将第64个从a,移到c

9 hanota(b, a, c, n - 1);//最后将b上的63个移到c

10 }

11}

12

13

14void T014() {

15char a = 'x';

16char b = 'y';

17char c = 'z';

18 hanota(a, b, c, 64);

19

20 }

以上是 汉诺塔问题【递归】 的全部内容, 来源链接: utcz.com/z/508977.html

回到顶部