private static List<int[]> UseRecursion(int[] arr, int length, int sumTotal) { List<int[]> result = new List<int[]>(); int[] nextArr = new int[length]; int nextLength = 0; int expectNum = sumTotal - arr[0]; int findStartNumCount = 0; int findEndNumCount = 0;
for (int i = 1; i < length; i++) { if (arr[i] == expectNum) { int circleCount = arr[0] == expectNum ? findEndNumCount : findStartNumCount; circleCount += 1;
// Print Normal Result //Console.WriteLine("The result number pairs using normal way are:/n----------------------------------"); //PrintNumPairs(resultUseNormalWay);
// Recursion way TimeSpan recuTimeStart = Process.GetCurrentProcess().TotalProcessorTime; Stopwatch recuStw = new Stopwatch(); recuStw.Start();
// Print Recursion Result //Console.WriteLine("The result number pairs using recusion way are:/n----------------------------------"); //PrintNumPairs(resultUseRecursionWay);
// Advanced way TimeSpan advTimeStart = Process.GetCurrentProcess().TotalProcessorTime; Stopwatch advStw = new Stopwatch(); advStw.Start();
// Print Advanced Result //Console.WriteLine("The result number pairs using advanced way are:/n----------------------------------"); //PrintNumPairs(resultUseAdvancedWay);
Console.WriteLine("/n================================/nThe time used:/n-----------------------------------"); Console.WriteLine(String.Format("Normal : count - {0} Cpu Time - {1} Real Time - {2}", resultUseNormalWay.Count, normalCupTime, normalRealTime)); Console.WriteLine(String.Format("Recursion: count - {0} Cpu Time - {1} Real Time - {2}", resultUseRecursionWay.Count, recuCupTime, recuRealTime)); Console.WriteLine(String.Format("Advanced : count - {0} Cpu Time - {1} Real Time - {2}", resultUseAdvancedWay.Count, advCupTime, advRealTime));
Console.Read(); }
private static int[] GenerateArray(int numCount, int minValue, int maxValue) { int[] arr = new int[numCount];
Random rdm = new Random((int)DateTime.Now.Ticks); for (int i = 0; i < arr.Length; i++) { arr[i] = rdm.Next(minValue, maxValue); }
return arr; }
private static void PrintNumArray(int[] arr) { for (int i = 0; i < arr.Length; i++) { if (i > 0 && i % 20 == 0) { Console.Write("/n"); } Console.Write(String.Format("{0,2} ", arr[i])); } Console.Write("/n"); }
private static void PrintNumPairs(List<int[]> numList) { for (int i = 0; i < numList.Count; i++) { if (i > 0 && i % 10 == 0) { Console.Write("/n"); } Console.Write(string.Format("({0,2},{1,2}) ", numList[i][0], numList[i][1])); } Console.Write("/n"); }
private static List<int[]> UseNormalWay(int[] arr, int sumTotal) { List<int[]> result = new List<int[]>();
for (int i = 0; i < arr.Length; i++) { int expectNum = sumTotal - arr[i];
for (int j = i + 1; j < arr.Length; j++) { if (arr[j] == expectNum) { result.Add(new int[]{arr[i], expectNum}); } } }
return result; }
private static List<int[]> UseRecursion(int[] arr, int length, int sumTotal) { List<int[]> result = new List<int[]>(); int[] nextArr = new int[length]; int nextLength = 0; int expectNum = sumTotal - arr[0]; int findStartNumCount = 0; int findEndNumCount = 0;
for (int i = 1; i < length; i++) { if (arr[i] == expectNum) { int circleCount = arr[0] == expectNum ? findEndNumCount : findStartNumCount; circleCount += 1;