/// <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 })); }
/// <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 })); }