默认计划
2389人加入学习
(4人评价)
【唐老狮】Unity基础课程之C#基础
价格 免费
承诺服务
该课程属于 Unity3d实战就业路线课程套餐
请加入后再学习

撞坑总结:

除了void外其他所有递归方法的任何判定条件(if else switch)的里面和外面都得返回一个合理的值,不然会报错“不是所有的输出都能返回一个具体的值”

 

输入一个数字后在return中依次调用方法往下减,减到等于1的时候让他直接返回这个方法(函数)为1的值,之后整个程序自动回退,此为递归

 

在递归第一次return的时候,这个return并没有 真正的执行,而是撞到了里面规定的方法(函数),继续循环,而当他撞到if 里面没有再让他进方法的return后,才会真实的后撤,并且return

        static int Factorial(int num)
        {
            if (num == 1)
            {
                return Factorial(1);
            }
            return num * Factorial(num - 1);
        }


        static void FactorialSum( int i = 1, long sum = 0)
        {
            if (i > 10)
            {
                Console.WriteLine("累乘再累加后的值为:" + sum);
                return;
            }
            sum += Factorial(i);
            i++;

            FactorialSum( i, sum);
        }

 

        static int FactorialSum(int num = 10)
        {

            if (num == 1)
            {
                return Factorial(1);
            }
            return Factorial(num) + FactorialSum(num - 1);
        }

 

短路不止可以用在逻辑判断的if switch里,也可以用来判断方法是否执行

 

比如

 

return true || 方法();【注意这个方法返回值需要是布尔】

 

只要满足条件方法就不会执行了

 

[展开全文]

 #region 练习题一
        //使用递归的方式打印0~10
        static void Fun(int a)
        {
            if (a>10)
            {
                return;
            }
            Console.WriteLine(a);
            ++a;
            Fun(a);
        }


        #endregion

        #region 练习题二
        //传入一个值,递归求该值的阶乘 并返回
        //5! = 1*2*3*4*5

        static int Fun2(int num)
        {
            if (num == 1)
            {
                return 1;
            }

            return num * Fun2(num - 1);
        }

        #endregion

        #region 练习题三
        //使用递归求 1!+ 2!+ 3!+ 4!+ ....10!
        static int Fun3(int num)
        {
            if (num ==1 )
            {
               return Fun2(1);
            }

            return Fun2(num) + Fun3(num - 1);
            
        }
        #endregion

        #region 练习题四
        //一根竹竿长100m,每天砍掉一半,求第十天它的长度是多少(从第0天开始)
        //一是长度 二是天数

        static void Fun4(float l,int d =0)
        {
            
            
            l /= 2;
            if (d == 10)
            {
                Console.WriteLine($"第十天砍后竹子长{l}m");
                return;
            }
            ++d;
            Fun4(l,d);
        }

        #endregion

        #region 练习题五
        //不允许 使用 循环语句、条件语句、在控制台中打印1-200这200个数(提示:递归+短路)

        static bool Fun5(int num)
        {
            Console.WriteLine(num);
            return num == 200 || Fun5(num+1);
        }
        #endregion

        static void Main(string[] args)
        {

            Fun(0);
            Console.WriteLine(Fun2(5));
            Console.WriteLine(Fun3(2));

            Fun4(100);

            Fun5(1);
        }

[展开全文]

授课教师

游戏开发前端主程

课程特色

视频(42)
下载资料(37)

学员动态

从零开始学unity 加入学习
DCMax 加入学习
鱼排fish 加入学习
星星屑屑诶嘿嘿 加入学习
haixiao_stack 加入学习