C# lambda+func实现多参递归

Func (Func Action Predicate区别和联系

       /// <summary>
        /// 多参递归函数
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="T1"></typeparam>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="f"></param>
        /// <returns></returns>
        public static Func<T, T1, TResult> CalcuMultiArgs<T, T1, TResult>(Func<Func<T, T1, TResult>, Func<T, T1, TResult>> f)
        {
            return (x, y) => f(CalcuMultiArgs(f))(x, y);
        }

Lambd实现

var fn = CalcuMultiArgs<int, int, int>(f => (x, y) =>
            {
                var tmpresult = x * y;
                if (x > 0 || y > 0)
                {
                    return tmpresult + f(x - 1, y - 1);
                }
                else
                {
                    return tmpresult;
                }
            });
            var result = fn(3, 2);
            Console.WriteLine(result);

 

posted @ 2019-11-25 20:16  10小虎  阅读(862)  评论(0)    收藏  举报