递归是一种编程技术,一个方法调用它本身;
比较经典的有:遍历迷宫,汉诺塔,N的阶乘,Fabonacci...
下面就举汉诺塔为例子介绍
C# Code:
class TowerofHanoi
{
private int totalDisks;
public TowerofHanoi(int disk)
{
totalDisks = disk;
}
public void Solve()
{
MoveTower(totalDisks, 1, 3, 2);
}
private void MoveTower(int numDisks, int start, int end, int temp)//第一次进来,(start=1,end=3,temp=2)
{
if (numDisks == 1) //第二次进来(start=1,end=2,temp=3)
MoveOneDisk(start, end); //第三次进来(start=1,end=3,temp=2)
else //第四次进来(start=3,end=2,temp=1)
{
MoveTower(numDisks - 1, start, temp, end);//第一次调用本身:(1,2,3);第二次调用本身:(1,3,2);在初次要移动第二块的时候返回到这里(1,3,2),
MoveOneDisk(start, end); //且从这个函数移动第二块,此时(start=1,end=2,temp=3)
MoveTower(numDisks - 1, temp, end, start);//第三次调用本身:(3,2,1)
}
}
private void MoveOneDisk(int start,int end)
{
Console.WriteLine ("Move one disk from:" +start +" to " + end );
}
}
class Program
{
static void Main(string[] args)
{
int n = int.Parse (Console.ReadLine());
TowerofHanoi towers = new TowerofHanoi(n);
towers.Solve();
Console.ReadKey();
}
}