using System.Collections.Generic;
public static void Main()
Console.WriteLine("recursive sum");
Console.WriteLine(RecursiveSum(new int[] {}));
Console.WriteLine(RecursiveSum(new int[] { 7 }));
Console.WriteLine(RecursiveSum(new int[] { 1, 2, 3, 4, 5 }));
Console.WriteLine(RecursiveSum(new int[] { -1, 2 }));
Console.WriteLine("\r\n");
Console.WriteLine("quick sort");
foreach (var number in QuickSort(new int[] { 3, -5, 2, -9, 2 }))
Console.WriteLine(number);
Console.WriteLine("\r\n");
Console.WriteLine("factorial");
Console.WriteLine(FactorialRecursive(5));
Console.WriteLine("\r\n");
Console.WriteLine("fibonacci");
Console.WriteLine(Fibonacci(8));
Console.WriteLine("\r\n");
Console.WriteLine("find max recursive");
Console.WriteLine(FindMaxRecursive(new int[] { 2, 5, 11, 0 }, -1));
Console.WriteLine("\r\n");
Console.WriteLine("find min");
Console.WriteLine(FindMin(new int[] { 2, 5, 11, 0, -6 }));
Console.WriteLine("\r\n");
Console.WriteLine("find array length recursive");
Console.WriteLine(FindArrayLengthRecursive(new int[] { }, 0));
Console.WriteLine(FindArrayLengthRecursive(new int[] { 2 }, 0));
Console.WriteLine(FindArrayLengthRecursive(new int[] { 2, 5, 11, 0 }, 0));
Console.WriteLine("\r\n");
Console.WriteLine("find array length");
Console.WriteLine(FindArrayLength(new int[] { }));
Console.WriteLine(FindArrayLength(new int[] { 2 }));
Console.WriteLine(FindArrayLength(new int[] { 2, 5, 11, 0 }));
Console.WriteLine("\r\n");
Console.WriteLine("test");
Console.WriteLine("\r\n");
Console.WriteLine("find index binary search recursive");
Console.WriteLine(FindNameByTelephoneNumberBinarySearch(
new Dictionary<string, int>
Console.WriteLine(FindNameByTelephoneNumberBinarySearch(
new Dictionary<string, int>
Console.WriteLine("\r\n");
private static int FindArrayLengthRecursive(int[] array, int length)
var list = new List<int>(array);
return FindArrayLengthRecursive(list.ToArray(), length);
private static int FindArrayLength(int[] array)
foreach (var number in array)
private static int FindMaxRecursive(int[] array, int max)
var list = new List<int>(array);
return FindMaxRecursive(list.ToArray(), max);
private static int FindMin(int[] array)
var list = new List<int>(array);
foreach (var number in list.Skip(0))
private static int FactorialRecursive(int number)
else return number * FactorialRecursive(number - 1);
private static int Fibonacci(int number)
if (number == 0 || number == 1)
else return Fibonacci(number - 1) + Fibonacci(number - 2);
private static int RecursiveSum(int[] array)
var list = new List<int>(array);
return list[0] + RecursiveSum(list.Skip(1).ToArray());
private static string FindNameByTelephoneNumberBinarySearch(Dictionary<string, int> dictSorted, int number)
if (dictSorted.Count == 1)
if (dictSorted.ElementAt(0).Value == number)
return dictSorted.ElementAt(0).Key;
var pivotIndex = dictSorted.Count / 2;
if (dictSorted.ElementAt(pivotIndex).Value == number)
return dictSorted.ElementAt(pivotIndex).Key;
var newDict = new Dictionary<string, int>();
var less = dictSorted.Where(kvp => kvp.Key[0] < dictSorted.ElementAt(pivotIndex).Key[0]).ToDictionary();
var more = dictSorted.Where(kvp => kvp.Key[0] > dictSorted.ElementAt(pivotIndex).Key[0]).ToDictionary();
if (less.Values.Contains(number))
if (more.Values.Contains(number))
return FindNameByTelephoneNumberBinarySearch(newDict, number);
private static int[] QuickSort(int[] array)
var lessList = new List<int>();
var moreList = new List<int>();
var sortedList = new List<int>();
var listFromArray = new List<int>(array);
var pivotIndex = array.Length / 2;
var pivot = listFromArray[pivotIndex];
listFromArray.RemoveAt(pivotIndex);
listFromArray.ForEach(number =>
sortedList.AddRange(QuickSort(lessList.ToArray()));
sortedList.AddRange(QuickSort(moreList.ToArray()));
return sortedList.ToArray();
private static void Test()
var dict = new Dictionary<string, int>
var pivot = dict.Count / 2;
var less = dict.Where(kvp => kvp.Key[0] < dict.ElementAt(pivot).Key[0]).ToDictionary();
var more = dict.Where(kvp => kvp.Key[0] > dict.ElementAt(pivot).Key[0]).ToDictionary();
foreach (var key in less.Keys)
Console.WriteLine("///");
foreach (var key in more.Keys)