zoukankan      html  css  js  c++  java
  • C#递归函数求解汉诺塔

    当盘子的个数为n时,移动的次数应等于2^n – 1。

    首先把三根柱子按顺序排成品字型,把所 有的圆盘按从大到小的顺序放在柱子

    上,根据圆盘的数量确定柱子的排放顺序:

    若n为偶数,按顺时针方向依次摆放A B C;

    若n为奇数,按顺时针方向依次摆放 A C B。

    {
    //第一个塔为初始塔,中间的塔为借用塔,最后一个塔为目标塔
    static int i=1;//记录步数

    static void move(int n,char from,char to) //将编号为n的盘子由from移动到to
    {
    Console .WriteLine("第{0}步:将{1}号盘子{2}---->{3} ",i++,n,from,to);
    }

    static void hanoi(int n,char from,char denpend_on,char to)//将n个盘子由初始塔移动到目标塔(利用借用塔)
    {
    if (n==1)
    move(1,from,to);//只有一个盘子是直接将初塔上的盘子移动到目的地
    else
    {
    hanoi(n-1,from,to,denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上
    move(n,from,to); //将剩下的一个盘子移动到目的塔上
    hanoi(n-1,denpend_on,from,to);//最后将借用塔上的n-1个盘子移动到目的塔上
    }
    }

    static void Main(string [] args)
    {
    Console .WriteLine("请输入盘子的个数: ");
    int n=Convert .ToInt32 (Console.ReadLine ());
    char x='A',y='B',z='C';
    Console .WriteLine("盘子移动情况如下: ");
    hanoi(n,x,y,z);
    }

    }

    没有什么问题是一个FOR循环解决不了的,如果有那就是两个!
  • 相关阅读:
    scrapy-redis 分布式爬虫
    爬虫-框架-Scrapy
    MongoDB
    爬虫-请求库之-selenium
    通过位异或来交换a,b的值和通过中间变量交换a,b的值
    位运算
    sizeof运算符
    运算符和表达式(类型转换)
    为什么计算机存储的是二进制补码?
    各种进制的学习与转换
  • 原文地址:https://www.cnblogs.com/xcc2016/p/5431066.html
Copyright © 2011-2022 走看看