C#小菜鸟

递归,初学者避过的一道坎儿,从经典的汉诺塔来说一说我对递归的理解和解决办法吧,我先把我的程序搬上来

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柱子
        }


    }
}

着里面很多步骤虽然是参考大神写的,唉自己太垃圾,但是里面的注释是我自己做的,最起码先了解了每一步是有什么作用,汉诺塔现实中很好理解,但是放到计算机中变成代码就有点难了,主要是不会把现实中的问题和方法变成代码,这是一个难以攻克的点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值