C++汉诺塔递归算法

首先考虑问题

要将盘子从A移动到C可以分成三步

1.将N-1号盘子移动到中转柱B上

2.将N号盘子移送到C上

3.将N-1号盘子从B放到C

完成步骤2后需要进行下面操作,现在N-1号盘子相当于N,中转柱变成了A

1.N-1(相当于N-2)号盘子从B移动到中转柱A

2.N号盘子移动到C

3.将N-1号盘子移动到C

.

.

.

之后的操作也是重复这两个过程

在以上过程中边的都是中转站,所以编写了以下代码

void hnmove(int n,char f,char t){

static int i=0;

printf("第%d步:移动%d号盘子,%c——>%c\n",++i,n,f,t);

}

//n是当前盘子,a是需要移动的柱子,b是中转站,c是接收的柱子

void hannuo(int n,char a,char b,char c){

if (n==1) {

hnmove(n, a, c);

}else{

hannuo(n-1, a, c, b);//移动N-1

hnmove(n, a, c);//移动N

hannuo(n-1, b, a, c);//移动N-2

}

}

主函数调用

int main(int argc, const char * argv[]) {

void hannuo(int n,char a,char b,char c);

int n=1;

char a='A',b='B',c='C';

printf("请输入汉诺塔层数");

cin>>n;

hannuo(n, a, b, c);

}

这个问题主要就是掌握要吧N移到目标柱,就要吧N-1先移到中转柱

以上

你可能感兴趣的:(C++汉诺塔递归算法)