递归,初学者避过的一道坎儿,从经典的汉诺塔来说一说我对递归的理解和解决办法吧,我先把我的程序搬上来
namespace hannuota
{
class HannuotaProgram
{
public int x;//汉诺塔层数
public static int steps = 0;//创建可访问的静态成员steps(步数)定义参数为0
static void Main(string[] args)//创建主函数
{
int levels = 0;//定义汉诺塔层级数,初始值为0
Console.Write($"请输入汉诺塔层级数:");//定义汉诺塔层级数
levels = int.Parse(Console.ReadLine());//将输入的汉诺塔层级数读取并赋值给level
if (levels > 0)
{
Move(levels, 'a', 'b', 'c');
Console.WriteLine($"总共移动了{HannuotaProgram.steps}次");//前面加$内部调用{HannuotaProgram.steps}步数计算
Console.ReadKey();
return;
}
else
{
Console.WriteLine("输入错误");
Console.ReadKey();
}
}
static void Move(int pile, char aSsource, char bTemporary, char cDestination)
{
if (pile == 1)
{
//Console.WriteLine($"{aSsource}-->{cDestination}");
steps++;
return;
}
Move(pile - 1, aSsource, cDestination, bTemporary);//将x-1层顺序移到暂存b柱子
Move(1, aSsource, bTemporary, cDestination);//将第一层顺序移到c柱子
Move(pile - 1, bTemporary, aSsource, cDestination);//将x-1层从暂存b柱子移到c柱子
}
}
}
着里面很多步骤虽然是参考大神写的,唉自己太垃圾,但是里面的注释是我自己做的,最起码先了解了每一步是有什么作用,汉诺塔现实中很好理解,但是放到计算机中变成代码就有点难了,主要是不会把现实中的问题和方法变成代码,这是一个难以攻克的点