首页 > Windows开发 > 详细

递归思路分解(C#)

时间:2017-01-12 21:31:11      阅读:301      评论:0      收藏:0      [点我收藏+]

  例子一:求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

递归思路分解(C#)

原文:http://www.cnblogs.com/syman/p/6279715.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!