汉诺塔递归实现可分为三步:
1.把n-1(除了最底下大盘子的上面所有盘子)个盘子借助C由A移到B
2.把第n个盘子由A移到C
3.把第n-1个盘子借助A由B移到C
#include <iostream>
using namespace std;
//汉诺塔
int nums = 0;
void move(char A, char C){
nums++;
cout<<"第"<<nums<<"步:将"<<A<<"柱子顶端的盘移动到"<<C<<endl;
}
void fun(int n, char A, char B, char C){
if(n==1){
move(A,C);
}else{
fun(n-1, A, C, B);//将n-1个盘子由 A经过 C移动到 B
move(A,C); //执行最大盘子n移动
fun(n-1, B, A, C);//剩下的 n-1盘子,由B经过A移动到C
}
}
int main(){
cout<<"汉诺塔移动步骤:"<<endl;
fun(3,'1','2','3');
return 0;
}