C#重载和递归

今天要写的是C#的重载和递归,先吧他们的区别和作用罗列出来吧

首先是:重载 用过c#的Console.WriteLine();的人应该都知道 这是是在控制台输出一些我们

编写的东西,当我在编码中对WriteLine进行F12的操作时如下:在这里插入图片描述
那么为什么我们最常用的WriteLine有这么多种可以用的方法呢? 我试试把光标指向WriteLine时:
在这里插入图片描述
这里显示有17个重载方法,而且名字都是同一个 ,下面就开始讲为什么要这样:先上代码

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("输入一个分钟数吧");
            int minutes = int.Parse(Console.ReadLine());

           Console.WriteLine(CountSeconds(0,1));//方法的重载,方法名称相同,参数列表相同
            
        }

        //根据分钟数计算秒数
        private static int CountSecondsByMinute(int minute)
        {
            return minute * 60;
        }

        //根据分钟数,小时数,输出总秒数
        private static int CountSecondsByMinuteAndHour(int minute, int hour)
        {
            return CountSecondsByMinute(minute + hour * 60);
        }
        //根据分钟数,小时数,天数,计算总秒数
        private static int CountSecondsByMinuteAndHourAndDay(int hour, int minute,int day)
        {           
            return CountSecondsByMinuteAndHour(minute, hour + day * 24);
        }


从这里分割开来 我们可以看到上面是我们用方法的嵌套来让用户输入天数,小时,或者是分钟
来达到我们获取多少秒的要求,但是有一个缺点就是,每一次我想调用秒的时候,是不是只能
用这三种里面的一种方法去带入
比如:  CountSecondsByMinuteAndHourAndDay(1,1,1);
又或者是: CountSecondsByMinuteAndHour(1,1);
这里我们要达到的目标都是一样的,但是我们获取秒用的方法是不是多了?
而且一多可能就难记住
所以我们可以用 下面的 **重载** 简而言之呢,就是把我们可以达到一个目的的多个方法,名字设
定为一样,然后层层套用,这时候,我们再用起来就像Console.WriteLine时侯一样了。
大家可以把代码拿去试一试,看看鼠标放在CountSeconds这个方法的时候 会不会出现效果

        private static int CountSeconds(int minute)
        {
            return minute * 60;
        }

        //根据分钟数,小时数,输出总秒数
        private static int CountSeconds(int minute, int hour)
        {
            return CountSeconds(minute + hour * 60);
        }

        //根据分钟数,小时数,天数,计算总秒数
        private static int CountSeconds(int hour, int minute, int day)
        {
            return CountSeconds(minute, hour + day * 24);
        }



    }


好了这里是分割线,记录完重载了,开始记录递归
递归:递归是一种可以把比较难的东西化而简之的方法 ,是一个方法内部又调用自身的过程

核心思想:将问题转移给范围缩小的子问题

优势:将复杂的问题简单化,一步步缩小然后化成子问题

缺点,每一次调用都会在内存里面开辟出一块空间来进行计算,对于优化不是一个好的选择
而且递归一般上是面试的时候考算法时用,真正项目中作用不是很大
看代码:

static void Main(string[] args)
        {
            GetValue(9);
            
            GetFactorial(3);
        }

        private static int GetFactorial(int num)
        {
            if (num == 1) return 1;
            //方法内部又调用自身的过程
            //核心思想:将问题转移给范围缩小的子问题
            //优势:将复杂的问题简单化 虽然会占用空间,一步步缩小然后化成子问题
            return num * GetFactorial(num - 1);
        }

        private static int GetValue(int num)
        {
            if (num == 1) return 1;

            if (num % 2 == 0)
                return GetValue(num - 1) - num;
            else
                return GetValue(num - 1) + num;

        }

       
    }

第一个是阶乘 第二个是输入1+2-3+4-5.。。。。。的效果,大家感兴趣可以自己试一试,自己打断点判断他的运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值