• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
gw2010
重新编程
博客园    首页    新随笔    联系   管理    订阅  订阅
徒手写汉诺塔

加班酱油看到园中略有汉诺塔的文章,不由得想起大学王吊老师给我们上的c语言课啊,其中有汉诺塔这一部分.隐隐记得一点点,但是下面代码肯定是徒手写出(这里和标题完全属于装B类型,突然想到徒手XXX,所以就把题目写得很装B.徒手撸一把,徒手斗歹徒,徒手泡妹妹.),突然感觉代码好短,可能是以前学校题目就差不多这些样子吧.不能太长了.

当然在写这个过程中还是有bug的.我去中间有一点改动,就是打印的地方.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            a.Fun('a', 'c', 3, 'b');
            Console.ReadLine();
        }

    }

    /// <summary>
    /// A,B,C 从A到C
    /// </summary>
    class A
    {
        //从a上把n盘子搬到c上,通过b来搬
        public void Fun(char a, char c, int n, char b)
        {
            if (n == 1)
            {
                Console.WriteLine("从{0}上搬1个盘子到{1}上", a, c);
            }
            else if (n > 1)
            {
                Fun(a, b, n - 1, c);
                Fun(a, c, 1, '*');
                Fun(b, c, n - 1, a);
            }
            else return;
        }
    }

}

总结

  练手,防子大脑变瓜.这个递归思想还是很简单的,要把n个盘子从a移动到c上面,借住b来完成,那么就要完成把n-1个盘子从a移到b,通过c,然后把a上的最后一个称到c,再把b上的盘子移动到c上面通过a来完成.所以分下来就是主要的三句.而n==1的时候就是移动,所以打印出来即可.

声明本博客文章未特殊注明均为原创,转载请注明作者和原地址。 博客地址:http://www.cnblogs.com/gw2010/ 博客首发:http://www.zhou2019.cn
posted on 2014-08-27 19:57  gw2010  阅读(268)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3