递归(hanoid tower)

问题:汉诺塔(港台:河内塔)是根据一个传说形成的数学问题:
     有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:
     每次只能移动一个圆盘;
     大盘不能叠在小盘上面。
     提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须遵循上述两条规则。
     问:如何移?最少要移动多少次?
解答:(C#)
namespace hanoi_tower
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine("Please insert a positive integer:");
            string a = Console.ReadLine();
            int n = Convert.ToInt32(a);
            int count = 0;
            Program step = new Program();
            count = step.hanoi(‘A‘, ‘B‘, ‘C‘, n, count);
            Console.WriteLine(count);
            Console.ReadKey();
        }
        public int hanoi(char a,char b,char c,int n,int count){
            if (n == 1)
            {
                Console.WriteLine("Move disk {0} from {1} to {2}.", n, a, c);
                return 1;  
            }
            else {
                count=hanoi(a, c, b, n - 1,count);
                Console.WriteLine("Move disk {0} from {1} to {2}",n,a,c);
                count+=1;
                count += hanoi(b, a, c, n - 1,count);
            }
            return count;
    
    }
    }
}                                                                                                                    

需要注意的有:1.Readline()返回值类型为string,需要转化为需要的type。
                方法:   string str=Console.ReadLine();//读入一行
                        int a = Convert.ToInt32(str);//第一种转换方式
                        int b = int.Parse(str);//第二种转换方式
                        int c;
                        int.TryParse(str, out c);//第三种转换方式
             2.建立类的实例来引用method。
             3.递归的初始化。
             4.疑问:count得到的值能及时返回到函数中吗?
时间: 2024-10-17 16:03:00

递归(hanoid tower)的相关文章

汉诺塔(Tower of Hanoi)问题的求解——利用栈与递归

汉诺塔(Tower of Hanoi)问题的求解--利用栈与递归 1. 汉诺塔问题的提法 汉诺塔问题是使用递归解决问题的经典范例. 传说婆罗门庙里有一个塔台,台上有3根标号为A.B.C的用钻石做成的柱子,在A柱上放着64个金盘,每一个都比下面的略小一点.把A柱上的金盘全部移到C柱上的那一天就是世界末日. 移动的条件是:一次只能移动一个金盘,移动过程中大金盘不能放在小金盘上面.庙里的僧人一直在移个不停,移动的最少总次数是264?1次,如果每秒移动一次的话,需要500亿年. 2. 求解汉诺塔问题的算

UVa 437 The Tower of Babylon

Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of this tale have been forgotten. So now, in line with the educational nature of this contest, we will tell you the whole story: The babylonians had n typ

3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 汉诺塔(Hanoi Tower)问题 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? 无外链        相关测试数据下载  链接? 无数

Hanoi Tower问题的求解

文章前部分为转载,转自http://www.cnblogs.com/yanlingyin/ 当然.这是一个经典的递归问题~   想必来看这篇博文的同学对汉诺塔应该不会陌生了吧, 写这篇博还是有初衷的: 之前学数据结构的时候自己看书.也上网上查了很多资料,资料都比较散.而且描述的不是很清楚,对于当时刚刚 接触算法的我,要完全理解还是有一定难度.今天刚好有时间就整理了下思路.重写分析了一下之前的疑惑的地方. 没有透彻的地方便都豁然开朗了.所以迫不及待把我的想法记录下来,和大家分享. 如果你也是和之前

数据结构与算法5: 递归(Recursion)

数据结构与算法5: 递归(Recursion) 写在前面 <软件随想录:程序员部落酋长Joel谈软件>一书中<学校只教java的危险性>一章提到,大学计算机系专业课有两个传统的知识点,但许多人从来都没搞懂过,那就是指针和递归.我也很遗憾没能早点熟练掌握这两个知识点.本节一些关键知识点和部分例子,都整理自教材或者网络,参考资料列在末尾.如果错误请纠正我. 思考列表: 1)什么程序具有递归解决的潜质? 2)递归还是非递归算法,怎么选择? 3)递归程序构造的一般模式 1.递归定义 首要引

递归(recursion)

人分两种:男人和女人:算法分两种:递归的和迭代/循环的:递归是指用自己的较简单的情形定义自己. 在数学和计算机科学中,递归是一种思路和策略,可以用于术语的定义(什么是表达式),问题的描述和问题求解.用于问题求解的递归称为递归法. 有一个故事.物理学家计算10!时会说,"看,它等于1*2*-*10,即3628800":数学家则说:"哦,10的阶乘,它等于10乘以9!". 递归算法"轻率地"认为自己的较简单的情形是已知的.既然fact(n-1)是已知

汉诺塔 Hanoi Tower

一个古老的印度传说:在世界的中心贝拿勒斯的圣庙里,一块黄铜板上插着三支宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上穿好了由大到小的64片金片,这就是所谓的汉诺塔(Hanoi Tower).不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面. 僧侣们预言,当所有的金片从梵天穿好的金片上移到另一根针上时,世界末日就会来临,而梵塔.寺庙和众生也会随之灭亡...... 故事不多说了,汉诺塔是递归思想的典型应用,上代码: 1 #i

两个递归程序(数组最大元素,汉诺塔)

1.递归返回数组中最大元素 //返回数组中最大元素 int findMax(int a[], int n) { int next = 0; if (n == 1) return a[0]; next = findMax(&a[1], n-1); return a[0]>next ? a[0] : next; } 2.汉诺塔 /* 汉诺塔:把盘子从A驻移动到C柱,大盘子时刻不能在小盘子之上 输入:n(盘子数目) 输出:步骤 */ int hanoid(char A, char B, char

递归趣文

公认的递归(Recursion)的标准定义是非常难理解的:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的:若一个过程直接地或间接地调用自己,则称这个过程是递归的过程.    递归一词很少有过专业的定义,因此本文不在于去解释上一段文字的意义.虽然概念抽象,但递归其本身是不难理解的.通过本文的介绍,读者不一定能深入了解递归,只要能通过具体的例子模模糊糊地知道一些递归的思想和用途就可以了.    究竟什么是递归呢?其实,递归就是大鱼吃小鱼,就是一条蛇咬住自己的尾巴.递归是指一样