C#汉诺塔(Honoi)递归问题
汉诺塔(Honoi)递归问题
汉诺塔实质就是解决n-1层的问题,类似于栈的先进后出。
先不要考虑很复杂的情况
当我们只有一个盘子的时候,这时候只需要一次A->C就足够了
点击查看代码
if(n==1)
{
Console.WriteLine(a+"移动到"+c);
count++;
}
当我们只有2个时候,要先将
A->B
A->C
B->C
则
点击查看代码
class Hanoi
{
int count=0;
public int hanoi(int n,string a,string b,string c)
{
if(n==1)
{
Console.WriteLine(a+"移动到"+c);
count++;
}
else
{
hanoi(n-1,a,c,b);
Console.WriteLine(a+"移动到"+c);
hanoi(n-1,b,a,c);
count++;
}
return count;
}
}
完整代码:
点击查看代码
using System;
namespace NetCore
{
class Program
{
static void Main(string[] args)
{
Hanoi test=new Hanoi();
int sum=test.hanoi(2,"a","b","c");
System.Console.WriteLine(sum);
}
}
class Hanoi
{
int count=0;
public int hanoi(int n,string a,string b,string c)
{
if(n==1)
{
Console.WriteLine(a+"移动到"+c);
count++;
}
else
{
hanoi(n-1,a,c,b);
Console.WriteLine(a+"移动到"+c);
hanoi(n-1,b,a,c);
count++;
}
return count;
}
}
}
把n-1与n的关系想成第二个盘子与第一个盘子的关系即可

浙公网安备 33010602011771号