• 递归


    一、概念

    函数体内吊用本函数自身,直到符合某一条件不在继续调用。

     

    二、应满足自身条件

    (1)有反复执行的过程(调用自身);

    (2)有跳出反复执行过程的条件(函数出口)

    三、例子

    四、注意事项

    1.递归中必须要存在一个循环结束的条件。

    2.递归函数的每次调用都需要栈来储存,如果次数太多的话容易造成栈溢出。

    例题:

    一群羊赶到个村庄去卖,每过一个村丢失之前总数的1/2零一只,过了7个村庄之后还剩两只,问最初赶出多少只羊

     class Program

    {
    public int dgqiuyang(int cun)
    {
    int sum = 0;
    if (cun == 7)
    {
    return 2;
    }
    sum = 2*(dgqiuyang(cun + 1) + 1);
    return sum;
    }

    static void Main(string[] args)
    {

    Program hb = new Program();
    double x = hb.dgqiuyang(1);
    Console.Write("递归求羊"+x);
    Console.ReadLine();


    }
    }
    }

    例题:


    //编写递归函数求 2*4*6*……*(2n) 的结果
    public int dgqiuyang(int cun)
    {
    int sum = 0;
    if (cun == 7)
    {
    return 2;
    }
    sum = 2 * (dgqiuyang(cun + 1) + 1);
    return sum;
    }

    static void Main(string[] args)

    {
    //Program jie= new Program();

    //Console.Write("请输入一个值:");
    //int n = int.Parse(Console.ReadLine());
    //int b = jie.jie(n);
    //Console.Write(b);
    //Console.ReadLine();



    //有雌雄一对兔子,每过一个月便可繁殖雌雄各一的一对小兔子。

    //问过n个月后共有多少对兔子?

    public int t(int z)
    {
    int sh = 0;
    if (z == 1)
    {
    return 2;
    }
    sh = 2 * t(z - 1);
    return sh;
    }

    static void Main(string[] args)

    {
    //Program tt = new Program();
    //Console.Write("请输入月数:");
    //int m = int.Parse(Console.ReadLine());
    //int y = tt.t(m);
    //Console.Write(y);
    //Console.ReadLine();


    //5个候选人竞选班长:张三,李四,王五,赵六,冯七
    //班级中共有20人,20人轮流投票
    //只要不是1~5之内的视为作废
    //最后要知道谁的票数最多,当选班长

    enum Houxuanren : int
    {
    one = 1,
    two,
    three,
    four,
    five
    }


    Console.WriteLine("请输入竞选班长的代码1、2、3、4、5来分别代表 张三, 李四, 王五, 赵六, 冯七");

    int[] shuzu = new int[20];
    for (int i = 1; i <= 20; i++)
    {
    Console.Write("请第" + i + "位同学来进行投票:");
    shuzu[i - 1] = int.Parse(Console.ReadLine());
    }
    Console.WriteLine("投票结束!按下回车开始统计票数!");
    Console.ReadLine();
    int zhangsan = 0, lisi = 0, wangwu = 0, zhaoliu = 0, fengqi = 0, zuofei = 0;
    for (int i = 0; i < 20; i++)
    {
    switch (shuzu[i])
    {
    case (int)Houxuanren.one:
    zhangsan++;
    break;
    case (int)Houxuanren.two:
    lisi++;
    break;

    case (int)Houxuanren.three:
    wangwu++;
    break;

    case (int)Houxuanren.four:
    zhaoliu++;
    break;

    case (int)Houxuanren.five:
    fengqi++;
    break;
    default:
    zuofei++;
    break;
    }

    }
    if (zhangsan > lisi && zhangsan > wangwu && zhangsan > zhaoliu && zhangsan > fengqi)
    {
    Console.WriteLine("张三胜出!票数为" + zhangsan);
    }
    else if (lisi > zhangsan && lisi > wangwu && lisi > zhaoliu && lisi > fengqi)
    {
    Console.WriteLine("李四胜出!票数为" + lisi);
    }
    else if (wangwu > lisi && wangwu > zhangsan && wangwu > zhaoliu && wangwu > fengqi)
    {
    Console.WriteLine("王五胜出!票数为" + wangwu);
    }
    else if (zhaoliu > lisi && zhaoliu > wangwu && zhaoliu > zhangsan && zhaoliu > fengqi)
    {
    Console.WriteLine("赵六胜出!票数为" + zhaoliu);
    }
    else if (fengqi > lisi && fengqi > wangwu && fengqi > zhaoliu && fengqi > zhangsan)
    {
    Console.WriteLine("冯七胜出!票数为" + fengqi);
    }
    Console.WriteLine("作废的票数为:" + zuofei);
    Console.ReadLine();


    }
    }
    }

  • 相关阅读:
    Java中的面向对象以及java的基本特性
    Redis数据结构(三):双向链表和压缩链表
    java对象晋升的四种情况
    Redis数据结构(一):对外数据类型和底层数据结构
    InnoDB中的的聚合函数count(?)哪个效率高?
    群智能算法标准测试函数集
    运行vue项目时报错“ValidationError: Progress Plugin Invalid Options”
    uswipeaction 宽度计算的延迟导致组件加载时内部样式错误
    地址智能识别相关插件
    js滑动验证
  • 原文地址:https://www.cnblogs.com/zzzy0828/p/5637814.html
Copyright © 2020-2023  润新知