• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
APS-叶童
博客园    首页    新随笔    联系   管理    订阅  订阅

C#汉诺塔问题递归法

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

 

 ------------------------------------------------------------------------------------------------------------------------------------------------

C#代码如下:

using System;

namespace Hanoi
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.WriteLine("请输入汉诺塔的层数:");
            n = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("移动步骤如下:");
            Move(n, 'x','y', 'z');
        }
        /// <summary>
        /// 将n个盘子从x借助y移动到z
        /// </summary>
        /// <param name="n">有n个盘子</param>
        /// <param name="x">X柱</param>
        /// <param name="y">Y柱</param>
        /// <param name="z">Z柱</param>
        static void Move(int n, char x, char y, char z)
        {
            if (n == 1)
            {
                Console.WriteLine($"{x}-->{z}\n");
            }
            else
            {
                Move(n - 1, x, z, y);//将n-1个盘子从x借助z移动到y
                Console.WriteLine($"{x}-->{z}\n");//将第n个盘子从x移动到z上
                Move(n - 1, y, x, z);//将n-1个盘子从y借助x移动到z
            }
        }
    }
}

 

posted @ 2021-03-31 23:17  所念所想亦如是  阅读(189)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3