C#汉诺塔(Honoi)递归问题

汉诺塔(Honoi)递归问题

汉诺塔实质就是解决n-1层的问题,类似于栈的先进后出。
先不要考虑很复杂的情况
当我们只有一个盘子的时候,这时候只需要一次A->C就足够了

点击查看代码
            if(n==1)
            {
                Console.WriteLine(a+"移动到"+c);
                count++;
            }

当我们只有2个时候,要先将
A->B
A->C
B->C

点击查看代码
class Hanoi
    {   
        int count=0;
        public int hanoi(int n,string a,string b,string c)
        {
            if(n==1)
            {
                Console.WriteLine(a+"移动到"+c);
                count++;
            }
            else
            {
                hanoi(n-1,a,c,b);
                Console.WriteLine(a+"移动到"+c);
                hanoi(n-1,b,a,c);
                count++;
            }
            return count;
        }
    }

完整代码:

点击查看代码
using System;
namespace NetCore
{
    class Program
    {
        static void Main(string[] args)
        {
            Hanoi test=new Hanoi();
            int sum=test.hanoi(2,"a","b","c");
            System.Console.WriteLine(sum);
        }
    }

    class Hanoi
    {   
        int count=0;
        public int hanoi(int n,string a,string b,string c)
        {
            if(n==1)
            {
                Console.WriteLine(a+"移动到"+c);
                count++;
            }
            else
            {
                hanoi(n-1,a,c,b);
                Console.WriteLine(a+"移动到"+c);
                hanoi(n-1,b,a,c);
                count++;
            }
            return count;
        }


    }
}

把n-1与n的关系想成第二个盘子与第一个盘子的关系即可

posted @ 2022-01-31 14:32  Ariaaaaa  阅读(15)  评论(0)    收藏  举报