1. 程式人生 > >一、.Net基礎【1.8】遞歸

一、.Net基礎【1.8】遞歸

[] 字符 pan 多少 style 兩個 ons int urn

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];//取最後一個元素的值 }

一、.Net基礎【1.8】遞歸