C#遞歸解決漢諾塔問題(Hanoi)


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;
        }
    }
}

//這個例子是猛哥(劉鐵猛)(也算是我的正式老師)講的,注釋部分我根據自己的理解加了一些,和網友們一起交流,共同進步!;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM