汉诺塔递归实现

     问题实现:当n==1时候只需将盘从A移到C即可,那摩当规模为n时候,可以转化为规模为n-1的情况

      1,借助C,将n-1个圆盘从A移到B

      2,将第n个盘从A移动到C

      3,借助A,将n-1个盘从B移动到C

/*下面代码的时间复杂度为O(2^n)*/

//hannoi.cpp
//--------------------------------------------------
#include<iostream>
using namespace std;
void MOVE(int n, char x,char y);
void hannoi(int n, char A, char B, char C);
int main(){
int n;
while (cin >> n){
hannoi(n,'A','B','C');
}
}
void MOVE(int n, char x,char y){
/*将第n个铜盘从x移到y*/
cout << "将" << n << "从" << x << "移到" << y << endl;
}
void hannoi(int n, char A, char B, char C){
/*表示将第n个铜盘借助B由A移动到C*/
if (n == 1){
/*此处为递归的结束条件*/
MOVE(1, A, C);
}
else{
hannoi(n - 1, A, C, B); /*将n-1个圆盘借助C从A移动到C*/
MOVE(n, A, C);/*将第n个圆盘从A移动到C*/
hannoi(n - 1, B, A, C);
}
}

原文地址:https://www.cnblogs.com/td15980891505/p/4439404.html