C++河内塔问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 18:55:16
#include<iostream.h>
void move(char a,char b)
{cout<<"move"<<a<<"to"<<b<<'\n';}

void hanoi(int n,char A,char B, char C)
{
if(n==1)move(A,C);
else{
hanoi(n-1,A,C,B);
move(A,C);
hanoi(n-1,B,A,C);
}
}
void main(void)
{
int n;
cout<<"Input number of plates!"<<'\n';
cin>>n;
cout<<'\n';
hanoi(n,'A','B','C');
}

hanoi()里面怎么调用的啊?没看懂,怎们只有move(A,C)呢?昏了,大侠能不能详细讲解一下,我很笨啊

hanoi(int n, char A, char B, char C)的意思是将A上的n个盘借助B移到C上

当n = 1时,只需要将A盘移到C盘就行了,即move(A, C)

遇到n个盘时,先将A上的n - 1个盘借助C移到B上,即hanio(n-1,A,C,B)
再将A最底下的那个盘直接移到C上
最后将B上的n - 1个盘借助A移到C上,即hanio(n-1,B,A,C)

也就是是说每一个move(A,C)中的A和C并不一定是A和C,而由包含它的hanio函数中第二个参数和第四个参数决定。

再说详细一点,hanio(n-1,A,C,B)执行时,函数中的move(A,C)这句的意思就是将A上的盘移到B上,有包含move函数的hanio函数的第二个参数和第四个参数决定。

汉诺塔~
递归,好好看看数据结构“栈”的一章。如果你弄懂了,这个汉诺塔就没有问题了。

你必须要了解问题的结构才会比较容易