C语言-汉诺塔

来源:互联网 发布:网络视频主持人 编辑:程序博客网 时间:2024/05/28 05:14

汉诺塔问题:

有A,B,C三根柱子,现往A上放n个盘子(小盘子在大盘子上面),求如何借助B柱将A上所有盘子移到C上,移动过程中大盘子不能再小盘子上面并且每次只能移动一个,输出移动步骤。

问题分析:

这里写图片描述
如图,我们可将n个盘子分成两部分,上面(n-1)个为1,最下面的单独为2。至此,将所有盘子移动到C柱只需3个步骤:

1.将1移到B柱。
2.将2移到C柱。
3.再将1从B柱移到C柱。

要将1移动到B柱,可继续将1分成两部分,上面(n-2)个为1-1,第(n-1)个为1-2。所以接下来应:

1.将1-1移到B柱。
2.将1-2移到C柱。
3.再将1-1移从B柱移到C柱。

以此类推,可以推至3个的情况,A-->B,A-->C,B-->C。

至此,发现递归规律,大功告成。

代码如下:

#include <stdio.h>void move(int n,char A, char B, char C){    if(n == 1)        printf("%c --> %c\n",A, C);    else    {        move(n-1,A,C,B);        move(1,A,B,C);         move(n-1,B,A,C);    }}int main(){    int n = 4;    move(n,'A','B','C');    return 0;} 

n = 4 时运行截图:

n=4时运行截图
The End

原创粉丝点击