我真的被这个递归震惊到了,move和printf的部分代表移动的方式
#include<iostream>
#include<stdio.h>
#include<time.h>
using namespace std;
int step=1;
void move(int n,char p,char q,char r)
{
if(n==1)
{
printf("[step %d] move plate 1# from %c to %c\n",step,p,r);
step ++;//这个是递归边界。
}
else{
move(n-1,p,r,q);//把n-1看作一个整体,把这个集体移动
printf("[step %d] move plate %d# from %c to %c\n",step,n,p,r);//把第n个盘子移动到目标
step++;
move(n-1,q,p,r);//再把n-1个集体移动
}
}
int main()
{
int n;
char a='a',b='b',c='c';
cin>>n;
move(n,a,b,c);
cout<<step-1;
return 0;
}
简单的程序,解决复杂的问题。继续学习。