C#递归解决汉诺塔问题(Hanoi)

时间:2021-06-05 00:27:18

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyExample_Hanoi_
{
    class Program
    {
        static void Main(string[] args)
        {
            HanoiCalculator c = new HanoiCalculator();
            Console.WriteLine(c.CalculateHanoi(64));//括号内可更改盘数
        }
    }

class HanoiCalculator
    {
        public ulong CalculateHanoi(int count)//count:盘子数
        {
            ulong stepForOnlyCurrentDish = 1;//搬动一个盘子只需要1步
            if (count == 1)
            {
                return stepForOnlyCurrentDish;//汉诺塔至少要一个盘子
            }
            ulong totalSteps = stepForOnlyCurrentDish + CalculateHanoi(count - 1)*2;//stepForOnlyCurrentDish搬动“最后一个”大盘子“只要一步+这个大盘子之上的那些盘子要构成汉诺塔所需步数(使用递归)+再把那些盘子搬回来
            return totalSteps;
        }
    }
}

//这个例子是猛哥(刘铁猛)(也算是我的正式老师)讲的,注释部分我根据自己的理解加了一些,和网友们一起交流,共同进步!;