这啥呀!直接摔书!
不得不说这是个好方法,教会了我们要争做老和尚!
假设只有3个盘子,和尚们也这样划分任务。那第三个和尚只需移动一个盘子,不需要划分任务了。
这就是边界值,停止递归的条件。(最后一个和尚只需移动一个盘子)
综上所述,把n个盘子从柱A移动到柱C:
接下来上代码了:
#include <iostream> using namespace std; //分析: 把柱A上(n-1)个盘子利用柱C从A放到柱B; (n-1) A -> B // 把柱A的一个盘子放到柱C; 1 A -> c // 把柱B的(n-1)个盘子利用柱A从B放到柱C; (n-1) B -> C void move(int n,char a,char b){ printf("将第%d个盘子从%c运到%c\n",n,a,b); } int hanoi(int n,char a,char b, char c){ if(n==1){ move(1,a,c); } else{ hanoi(n-1,a,c,b); move(n,a,c); hanoi(n-1,b,a,c); } return 0; } int main(){ int num; while(scanf("%d",&num)!=EOF){ hanoi(num,‘A‘,‘B‘,‘C‘); } return 0; }
呜呜呜。。。少时不努力,老大不会打代码。。
原文:https://www.cnblogs.com/yinniora/p/12103685.html