c# number求和的三種方式


直接看源代碼;

總結:

第一種方式,利用中間變量進行累加,這種方式最簡單粗暴;

第二種方式; 利用我們linq aggretion(聚合)的原理,有點函數編程的感覺,每一次求和的結果,參與到下一次的計算中;

第三種方式:經典的遞歸;

三種方式,結果沒有什么,差異,更過的是體會實現過程;

        /// <summary>
        ///  這種是利用中間變量實現累加的一個過程;
        /// </summary>
        static void Sum()
        {
            int sum = 0;
            int n = 3;
            for(int i = 1; i <=n; i++)
            {
                sum+=i;
            }
            Console.WriteLine($"{sum}");
        }


        /// <summary>
        /// 這種有點函數式編程的想法;一次相加的結果,返回參與到另一次求和中
        /// 這個就是我們linq的aggrega 的原理;
        /// </summary>
        /// <param name="acctor"></param>
        /// <param name="num"></param>
        /// <returns></returns>
        static int  acc(int acctor,int num)
        {
            return acctor + num;
        }
        
        /// <summary>
        /// 
        /// </summary>
        static void TestAcc()
        {
            int total = 0;
            int num = 3;
            for (int i = 1; i <=num; i++)
            {
                total = acc(total, i);
            }
            Console.WriteLine(total);
        }

        //用遞歸的方式來求和;
        static int Recurrion(int num)
        {
            if (num == 0)
            {
                return 0;
            }
            return num+ Recurrion(num - 1);
        }


        static void Main(string[] args)
        {
            Console.WriteLine("sum-----");
            Sum();
            Console.WriteLine("acc-----");
            TestAcc();
            Console.WriteLine("recursion----");
            int result = Recurrion(3);
            Console.WriteLine(result);
            Console.ReadLine();

        }

 

結果:

 


這里再對第二種方式,進行一定的優化=》有點尾遞歸的效果了,大概的思想,就是想函數計算的后的結果,當成參數;傳遞進入函數,參與到下一次的計算中

 /// <summary>
        /// 一次函數計算的結果,又參與到另一次(下一次的函數計算中)
        /// 本次計算的結果,參數到下次一的計算中;
        /// </summary>
        /// <param name="n"></param>
        /// <param name="acc"></param>
        /// <returns></returns>
        static int acc(int n,int ac)
        {
            if (n == 0)
            {
                return ac; //直接就返回計算的結果了
            }
            else
            {
                int thisTimeCalResult = n + ac;//本次計算的結果,
                return acc(n-1,thisTimeCalResult); //參與到下一次的結算中
            }

        }

        /// <summary>
        /// 還有順便提一下,系統自帶的聚合函數
        /// 原理和上面的基本一致
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        static int agg(List<int> list)
        {
            int result =list.Aggregate(4,(x,y)=>x+y);
            //我們也可用通過求乘法的方式來進行各種計算滴呀;
            return result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {

            int val = 8;
            List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
            int sum_acc = acc(val,0);
            int sum_agg = agg(list);

            Console.WriteLine(sum_acc);
            Console.WriteLine("這個就是通過我們聚合的方式,來實現我們這種數據的計算滴呀");
            Console.WriteLine(sum_agg);
            Console.ReadLine();


        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM