递归应用-汉罗塔问题精讲

2019-07-27  本文已影响0人  始于尘埃

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆: 每次只能移动一个圆盘; 大盘不能叠在小盘上面。 提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。

问:如何移?最少要移动多少次?

#include <iostream>
using namespace std;

int i = 1;
void Hanoi(int n,char A,char B,char C){
    if(n == 1){
        cout<<"Move"<<n<<"from "<<A<<"to"<<B<<"\n";
    }
    else{
        Hanoi(n-1,A,C,B); //把n-1从A移动到C
        cout<<"Move"<<n<<"from "<<A<<"to"<<B<<"\n";//最后把n移动到B
        Hanoi(n-1,C,B,A);//把n-1从C移动到B 
    }
} 

int main(){
    Hanoi(5,'A','B','C');
    return 0;
}
上一篇 下一篇

猜你喜欢

热点阅读