国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

理解漢諾塔遞歸算法

2019-11-08 02:16:07
字體:
來源:轉載
供稿:網友

1. 概述

第一次遇見漢諾塔問題是在數據結構課本上,是一個很經典的遞歸算子。漢諾塔問題實際上就是要將柱子A上由小到大排列的圓環按照相同的大小順序移動到柱子C,之間的過程可以使用柱子B。這個問題使用遞歸和歸納的思想來思考的話就很容易理解了。下面這貨就是漢諾塔了其遞歸的歸納思想是這樣的:(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)

2. 實現

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. 結果


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望都县| 祁东县| 绥化市| 新丰县| 普兰店市| 镇巴县| 通州市| 留坝县| 凤城市| 高平市| 乌兰浩特市| 尤溪县| 泾阳县| 青川县| 栾川县| 静安区| 平顺县| 江达县| 新建县| 宣化县| 宝清县| 景宁| 沈丘县| 张家港市| 新津县| 南宁市| 林周县| 资中县| 玉环县| 灯塔市| 武功县| 运城市| 金堂县| 淮南市| 五原县| 昭平县| 边坝县| 和平县| 桂平市| 师宗县| 岱山县|