递归函数的练习,汉诺塔问题的程序实现(递归)

1.汉诺塔是由三根杆子A,B,C组成的。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。问:如何移?最少要移动多少次?汉诺塔是根据一个传说形成的一个问题:

有三根杆子A,B,C。A杆上有N个(N>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:

每次只能移动一个圆盘;

大盘不能叠在小盘上面。

提示:可将圆盘临时置于B杆,也可将从A杆移出的圆盘重新移回A杆,但都必须尊循上述两条规则。

问:如何移?最少要移动多少次?

 1 class Program
 2     {
 3         static int i = 1;
 4         static void move(int n, char from, char to) //将编号为n的盘子由from移动到to  
 5         {
 6             Console.WriteLine("第{0}步:将{1}号盘子{2}---->{3}
", i++, n, from, to);
 7         }
 8         static void hanoi(int n, char from, char denpend_on, char to)//将n个盘子由初始塔移动到目标塔(利用借用塔)  
 9         {
10             if (n == 1)
11                 move(1, from, to);//只有一个盘子是直接将初塔上的盘子移动到目的地  
12             else
13             {
14                 hanoi(n - 1, from, to, denpend_on);//先将初始塔的前n-1个盘子借助目的塔移动到借用塔上  
15                 move(n, from, to);              //将剩下的一个盘子移动到目的塔上  
16                 hanoi(n - 1, denpend_on, from, to);//最后将借用塔上的n-1个盘子移动到目的塔上  
17             }
18         }
19         static void Main(string[] args)
20         {
21             Console.Write("请输入盘子的个数:
");
22             int n;
23             n = Convert.ToInt32(Console.ReadLine());
24             char x = 'A', y = 'B', z = 'C';
25             Console.Write("盘子移动情况如下:
");
26             hanoi(n, x, y, z);
27 
28             
29         }

运行结果举例:

2.猴子吃桃的问题

 1 static void Main(string[] args)
 2         {
 3             int a=Taozi(1);
 4             Console.WriteLine(a);
 5             
 6         }
 7         static int Taozi(int day)
 8         {
 9             if (day == 7)
10             {
11                 return 1;
12             }
13             int n = (Taozi(day + 1) + 1) * 2;
14             return n;
15         
16         }

3.做梦

 1  static void Main(string[] args)
 2         {
 3             //递归函数
 4             //做梦
 5             Test(1);
 6             Console.WriteLine();
 7         }
 8         static void Test(int n)
 9         {
10             if (n>10)
11             {
12                 return;
13             }
14             Console.WriteLine("这是第{0}次在做梦",n);
15             Test(n+1);
16             Console.WriteLine("第{0}次梦醒了",n);
17         }

运行结果:

4.折纸问题:

 static void Main5(string[] args)
        { 
        //折纸
            double houdu = 0.00008;
             Zhezhi(houdu);
            Console.WriteLine(n);
        }
        
        static void Zhezhi(double h)
        {
            
            if (h>8848)
            {
                return ;
            }

               Zhezhi(h*2);
                 n++;
                      
        }
原文地址:https://www.cnblogs.com/kellybutterfly/p/5436256.html