递归思路分解(C#)

  例子一:求1!+2!+......+X!

  思路分解:因为是用递归思想解决问题,也就是方法调用方法。那么肯定的方法是重复利用的。在这道题里,我们要重复利用的也就是求X!和求和

  所以我们先把求X!的代码写出来:

        //x!计算
        static int Factorial(int intValue)
        {
            int factorial = 1;
            for(int i=1;i<=intValue;i++)
            {
                factorial *= i;
            }
            return factorial;
        }

  然后就是重复使用上面的Factorial()方法计算总和

  代码如下: 

        //求阶层和
        static int FactorialSum(int num)
        {
            if (num <= 1)
                return 1;
            return Factorial(num) + FactorialSum(--num);
        } 

  当num=3的时候(为了方便分解,选一个小点的数字),程序是这样走的:

  

        static void Main(string[] args)
        {
            int sum = FactorialSum(3);
            Console.WriteLine(sum);
            Console.ReadKey(); 
            
        }

  

  第一次迭代:return Factorial(3)+FactorialSum(2);

  第二次迭代:return Factorial(3)+ [return Factorial(2)+FactorialSum(1)];

  第三次迭代:return Factorial(3)+ [return Factorial(2)]+ [return 1];

  每次return返回的都是int类型的数,所以最后结果就是总和。

  注意:代码里的FactorialSum(--num)比如是--num,不能是num++,否则永远也跳不出循环。

 

  例子二:一长度为X的竹竿每天减去一半,问第N天之后的长度是多少

  思路:需要重复用的方法就是X/2,所以一个方法应该就能搞定

  代码如下:

  

        static double GetLength(double length,int days)     //days为第几天,length为竹子的长度
        {
            if(days<=1)
            {
                return length / 2;
            }
            else
            {
                return GetLength(length / 2, --days);
            }
        }

  以上都是个人思想,如有什么不严谨不妥之处,还望提出来emojo

posted @ 2017-01-12 20:27  小洋大海  阅读(572)  评论(1编辑  收藏  举报