学习笔记---递归的代码,解决经典的汉诺塔问题
2010-09-28 23:50
751 查看
一段递归的代码,汉诺塔问题
代码
代码
using System; namespace MoveHanoiTowerNS { class Program { static void Main(string[] args) { Console.Clear(); string input = null; int num = -1; while (true) { Console.Write("请输入参与挪动的盘子数量(1-20):"); input = Console.ReadLine(); num = Int32.Parse(input); MoveTowerFunction.MoveDisk(num); Console.WriteLine("\n---------------------------------------------------------------\n"); } } } public static class MoveTowerFunction { private static readonly ConsoleColor oldbgcolor = Console.BackgroundColor; private static readonly ConsoleColor oldfgcolor = Console.ForegroundColor; private static int initnum = -1; private static int midnum = -1; private static int count = 0; //公有方法作为对外联系的渠道 public static void MoveDisk(int num) { if (num >= 1 && num <= 20) { string start = "A";//表示起始柱 string help = "B";//表示中间的辅助柱 string target = "C";//表示移动的目标柱 initnum = (int)Math.Pow(2,num)-1; midnum = initnum / 2; Console.WriteLine(initnum.ToString()); moveDisk(num, start, help, target); count = 0; } else { Console.WriteLine("可移动的盘子数量只能在1-20之间!"); } } //私有方法完成实际的内部计算 //递归法--方法内部继续逐次调用本方法,调用过程必须呈现为收敛性 private static void moveDisk(int n,string start,string help,string target) { if (n <= 1)//1个盘子 { initnum--; count++; if (initnum > midnum) { Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Yellow; } else if (initnum < midnum) { Console.BackgroundColor = ConsoleColor.Red; Console.ForegroundColor = ConsoleColor.Blue; } else { Console.BackgroundColor = ConsoleColor.Yellow; Console.ForegroundColor = ConsoleColor.Red; } Console.WriteLine(count+".\t" + start + "=================>" + target); Console.BackgroundColor = oldbgcolor; Console.ForegroundColor = oldfgcolor; //returnColor(); } else//2个以上(含2个)盘子 { moveDisk(n - 1, start, target, help);//移动上面的n-1个盘子,从左柱到中柱 moveDisk(1, start, help, target);//移动最下面的1个盘子,从左柱到右柱 moveDisk(n - 1, help, start, target);//移动上面的n-1个盘子,从中柱到右柱 } } private static void returnColor() { Console.BackgroundColor = oldbgcolor; Console.ForegroundColor = oldfgcolor; } } } /* * 思考题: * 参考共享下的彩色版哈诺塔程序,使用纯递归的手法来完成其编号及变色。 * 已解决,见代码 */
相关文章推荐
- 3行核心代码解决汉诺塔问题(C++递归实现)
- 经典递归解决汉诺塔问题 python实现
- 递归解决汉诺塔问题解法java代码
- 汉诺塔问题是使用递归解决问题的经典范例。
- TensorFlow学习笔记7——Win7下Spyder运行python代码出现UnicodeEncodeError问题的解决
- Python初学笔记:递归解决汉诺塔问题
- python数据结构学习笔记-2017-01-08-01-N皇后问题、迷宫问题和跳马问题的递归解决
- STL学习笔记:用非递归的方法实现汉诺塔问题
- 简明pyton教程学习笔记 6-10 控制流+函数+模块+数据结构+解决问题
- QT学习笔记----解决QT无法显示汉字问题
- Logistic Regression 学习笔记 : 解决概率预估或者分类问题
- 经典递归解决汉诺塔!
- 递归:解决汉诺塔问题(数据结构3.2 P103)
- Python学习笔记(二)--解决中文的问题
- IOS学习笔记36—解决键盘遮挡输入框(UITextField)问题
- Coursera deeplearning.ai 深度学习笔记2-1-Practical aspects of deep learning-神经网络实际问题分析(初始化&正则化&训练效率)与代码实现
- 【学习笔记】〖ASP.NET〗在后台代码中取到控件旧值的解决办法
- 学习笔记-设计模式GRASP和GoF是怎样解决不同情况的耦合问题
- CEGUI学习笔记六-- 使用CEGUI解决具体问题