设移动盘子数为n,为了将这n个盘子从A杆移动到C杆,可以做以下三步: (1)以C盘为辅助,从A杆将1至n-1号盘移至B杆; (2)将A杆中剩下的第n号盘移至C杆; (3)以A杆为辅助;从B杆将1至n-1号盘移至C杆。
我们采用递归的方法解决该问题:(编译环境:Ubuntu18.04 Vim)
代码语言:javascript复制#include <stdio.h>
void hano(int n, int src, int aux ,int dest)/*n为移动盘子数,src为起始杆,dest为目标杆,aux为辅助杆*/
{
if(n == 1)
{
printf("mov no.%d disc :from %c to %cn",n,src,dest);
return;
}
hano((n - 1),src,dest,aux);
printf("mov no.%d disc: from %c to %cn",(n - 1),src,dest);
hano((n - 1),aux,src,dest);
}
int main()
{
hano(3,'A','B','C');
return 0;
}
运行结果: