其遞歸的歸納思想是這樣的:(1)首先,當只有一個盤子的時候只需要將A上的1號盤子移動到C上就行了(2)當有2個盤子在A上的時候,需要將A上的1號盤子(由上往下數)移動到B上,再將A上的2號盤子移動到C上,之后將B上的1號盤子移動到C上(3)當有3個盤子在A上的時候,需要將A上的1號和2號盤子移動到B上(需要借助C),之后將A上的3號盤子移動到C上,再將B上的盤子移動到C上(需要借助A)(...)以此類推(N)當有N個盤子在A上的時候,需要將A上的N-1個盤子移動到B上(需要借助C),之后將A上的第N個盤子移動到C上,再將B上的盤子移動到C上(需要借助A)CHanoi::CHanoi(){ this->m_stepCount = 0; //設置步數為0}//************************************************************************// 函數名稱: CHanoi// 訪問權限: public // 創建日期: 2016/12/27// 創 建 人: // 函數說明: 漢諾塔類構造函數// 函數參數: unsigned int plate_num 定義圓盤的個數// 返 回 值: //************************************************************************CHanoi::CHanoi(unsigned int plate_num){ this->m_plateNum = plate_num; //設置圓盤的個數 this->m_stepCount = 0; //設置步數為0}CHanoi::~CHanoi(){}//************************************************************************// 函數名稱: Hanoi_Move// 訪問權限: public // 創建日期: 2016/12/27// 創 建 人: NPC// 函數說明: 遞歸漢諾塔算法// 函數參數: unsigned int plate_num 放置的盤子的數目// 函數參數: std::string from 盤子的初始放置位置// 函數參數: std::string depend 盤子移動需要借助的位置// 函數參數: std::string to 盤子移動的目標位置// 返 回 值: void//************************************************************************void CHanoi::Hanoi_Move(unsigned int plate_num, std::string from, std::string depend, std::string to){ if (1 == plate_num) { cout << "第 " << ++this->m_stepCount << " 步: " << "將盤子" << plate_num << "由 " << from << " 移動到 " << to << endl; return; } else { this->Hanoi_Move(plate_num-1, from, to, depend); cout << "第 " << ++this->m_stepCount << " 步: " << "將盤子" << plate_num << "由 " << from << " 移動到 " << to << endl; this->Hanoi_Move(plate_num-1, depend, from, to); }}class CHanoi{public: CHanoi(); CHanoi(unsigned int plate_num); ~CHanoi();PRivate: unsigned int m_plateNum; unsigned int m_stepCount;public: void Hanoi_Move(unsigned int plate_num, std::string from, std::string depend, std::string to); //遞歸漢諾塔算法};調用: CHanoi* p = new CHanoi(); p->Hanoi_Move(3, "A", "B", "C");3. 結果

新聞熱點
疑難解答