Beispiel #1
0
        /// <summary>
        /// More than one parameter. Non-recursive.
        /// </summary>
        private static void Memoize_MoreParameters_NonRecursive()
        {
            Console.Write("Memoize_MoreParameters_NonRecursive: ");

            // Define the original function.
            Func <object[], object> multiply = (arguments) =>
            {
                // ----- Arguments -----
                int factor1 = (int)arguments[0];
                int factor2 = (int)arguments[1];
                // ---------------------

                return(factor1 * factor2);
            };

            // Define the memoized function.
            Func <object[], object> multiply_Memoized = Memoizer.Memoize_MoreParameters(multiply);

            Console.WriteLine(multiply_Memoized(new object[] { 3, 4 }));
        }
Beispiel #2
0
        /// <summary>
        /// More than one parameter. Recursive. Version 1.
        /// </summary>
        private static void Memoize_MoreParameters_Recursive1()
        {
            Console.Write("Memoize_MoreParameters_Recursive1: ");

            // Define the original function.
            Func <object[], object> binomialCoefficient = null;

            binomialCoefficient = (arguments) =>
            {
                // ----- Arguments -----
                int n = (int)arguments[0];
                int k = (int)arguments[1];
                // ---------------------

                return((k != 0 && k != n) ? (int)binomialCoefficient(new object[] { n - 1, k }) +
                       (int)binomialCoefficient(new object[] { n - 1, k - 1 }) : 1);
            };

            // Define the memoized function.
            Func <object[], object> binomialCoefficient_Memoized = Memoizer.Memoize_MoreParameters(binomialCoefficient);

            Console.WriteLine(binomialCoefficient_Memoized(new object[] { 3, 2 }));
        }