一、.Net基础【1.8】递归

1.什么是递归?

方法自己调用自己。两个条件:递推方法;递归的终止条件:什么情况下不再递归。

2.案例1:阶乘

     //阶乘:5!=5*4*3*2*1。6!=6*5*4*3*2*1。f(n)=n*f(n-1)
        static int JieCheng(int n)
        {
            //把栈内存填满了
            //return n * jiecheng(n - 1);
            if (n < 0)
            {
                Console.WriteLine("n不能是负数");
            }
            if (n == 0)
            {
                return 1;
            }
            return n * jiecheng(n - 1);
        }

3.案例2:利用递归实现斐波那契数列

        //1,1,2,3,5,8,13,21.....第n位(从0开始)值是多少?斐波那契额数列
        //递推方法:f(n)=f(n-1)+f(n-2)。终止条件:n=0,1 return 1。
        static int Fib(int n)
        {
            if (n < 0)
            {
               Console.WriteLine("n不能是负数");
            }
            if (n == 0 || n == 1)
            {
                return 1;
            }
            return fib(n - 1) + fib(n - 2);
        }
    

4.案例的非递归算法

         static int JieCheng2(int n)
        {
            if (n < 0)
            {
                Console.WriteLine("n不能是负数");
            }
            //n*(n-1)*(n-2)*1
            int result = 1;
            for (int i = 1; i <= n; i++)
            {
                result = result * i;
            }
            return result;
        }

        static int Fib2(int n)
        {
            if (n < 0)
            {
                Console.WriteLine("n不能是负数");
            }
            if (n == 0 || n == 1)
            {
                return 1;
            }
            int[] nums = new int[n + 1];
            nums[0] = 1;
            nums[1] = 1;
            for (int i = 2; i < n + 1; i++)
            {
                nums[i] = nums[i - 1] + nums[i - 2];
                Console.WriteLine(string.Join(",", nums));//string.Join把一个集合用某个分隔符拼接起来,成为字符串
            }
            return nums[n];//取最后一个元素的值
        }

 

posted @ 2017-12-23 23:48  LolitaGIS的笔记  阅读(503)  评论(0编辑  收藏  举报