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循环解决不了的,如果有那就是两个!
  • 相关阅读:
    5+ App开发Native.js入门指南
    uni-app vue-cli命令行
    本地uni-app原生插件提交云端打包
    编写package.json文件
    生成插件包
    无障碍角色 accessibilityRole (iOS, Android)
    ajax 整理
    Javascript分享笔记
    echarts 横坐标分行展示,以及文字显示顶部
    js总结(11)js作用域
  • 原文地址:https://www.cnblogs.com/xcc2016/p/5431066.html
Copyright © 2011-2022 走看看