zoukankan      html  css  js  c++  java
  • 递归函数的练习,汉诺塔问题的程序实现(递归)

    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++;
                          
            }
  • 相关阅读:
    lnmp配置https,配置pathinfo---------记录学习
    微信公众号第三方授权登录->自带源码-->自己记录学习
    二维数组排序
    php 图片,文件下载
    PHP最彻底的退出登录,清除session、cookie的代码
    php 安装redis扩展
    2020系统综合实践(七)第15组
    2020系统综合实践(六)第15组
    2020系统综合实践(五)
    2020系统综合实践(四)
  • 原文地址:https://www.cnblogs.com/kellybutterfly/p/5436256.html
Copyright © 2011-2022 走看看