汉诺塔问题(递归)--算法学习

Hadara ·
更新时间:2024-09-20
· 697 次阅读

问题

古代有一个塔,塔内有三个座A,B,C,A盘上有64个盘子,盘子大小不等,大的在下,小的在上,有一个和尚想把这64个盘子从A座移到C座,但是每次只允许移动一个盘子,并且在移动过程中,3个座上始终保持大盘在下,小盘在上, 在移动过程中可以利用B座,要求输出移动的步骤
在这里插入图片描述
思路:
用B盘子为中转,移动到C盘,先把A上的盘子移动到B,这时以C为中转,最后以A为中转将盘子移动到C,形成递归

代码:

void Hanoi(int n,char A,char B,char C) //将A座上的n个盘子,以B为中转,移动到C座 { if(n==1){//只需移动一个盘子 cout<<A<"<<C<<endl; //直接将盘子从A移动到C return ;//递归终止 } Hanoi(n-1,A,C,B);//先将n-1个盘子从A移动到B cout<<A<"<<C<>n;//输入盘子数目 Hanoi(n,'A','B','C'); return 0; }
作者:Available time



学习 汉诺塔 递归 算法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号