汉诺塔问题

汉诺塔问题

题目:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

汉诺塔问题_第1张图片思路分析:本体看起来十分繁琐,但是通过逐步分割问题便可以解开谜题。
假设移动3块金盘,如图所示:
汉诺塔问题_第2张图片运用递归思想可以很好的解决,其核心就是将A,B,C三个针作为过渡针

#include 
using namespace std;
//这里选择四个参数,分别为,总共要移动的金盘,起始针,目标针,过渡针
void Move(int n, int start, int end, int temp)
{
	if(n>=1)
	{
	Move(n-1,start,temp,end);
	cout<<"move "<<n<<" from "<<start<<" to "<<temp;
	Move(n-1,temp,end,start);
	}
}

总结:递归并不能减少内存的消耗和提高执行的效率,但可以让书写的代码更加的简洁,让人非常直观的理解

你可能感兴趣的:(自主学习-数据结构与算法)