zoukankan      html  css  js  c++  java
  • 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();
    
    
            }
  • 相关阅读:
    也八卦一把:李开复离开微软,投奔Google
    用于苹果OS Ⅹ Dashboard Widgets 的Google Map小部件
    下一代Hotmail和MSN Messenger最新界面截图
    Go2Map也开放了地图API
    《Excel与VBA程序设计》第三章及附录
    非广告: 365key的好处(随时收集)
    VS2005多线程程序在IDE下调试的一个问题
    买了《.net模式--架构、设计和过程》
    Expect 在网络管理中发挥着重要作用
    source insight 快捷键
  • 原文地址:https://www.cnblogs.com/mc67/p/8184203.html
Copyright © 2011-2022 走看看