diff --git a/src/InterviewQuestions/Program.cs b/src/InterviewQuestions/Program.cs index 0f5798f..495ac9e 100644 --- a/src/InterviewQuestions/Program.cs +++ b/src/InterviewQuestions/Program.cs @@ -14,7 +14,25 @@ static void Main(string[] args) var array = ArrayViewModel.LeftRotationByD(new int[] { 1, 2, 3, 4, 5 }, 1); LinkedList linkedlist = new LinkedList(new int[] { 1, 2, 3, 4, 5 }); - var fib = RecursionViewModel.Fibonacci(3); + + var fibN1 = 40; + var watch = System.Diagnostics.Stopwatch.StartNew(); + var fib = RecursionViewModel.Fibonacci(fibN1); + watch.Stop(); + var elapsedMs = watch.ElapsedMilliseconds; + Console.WriteLine(string.Format("Fib Recursion n = {0} solution {2} Elapsed Ms {1}", fibN1, elapsedMs, fib)); + + + Console.WriteLine(string.Format("Fib DP n = {0} solution {1}", fibN1, RecursionViewModel.Fibonacci_DynamicProgramming(fibN1))); + + var fibN2 = 40000; + var watch2 = System.Diagnostics.Stopwatch.StartNew(); + var fib2 = RecursionViewModel.Fibonacci_DynamicProgramming(fibN2); + watch2.Stop(); + var elapsedMs2 = watch2.ElapsedMilliseconds; + Console.WriteLine(string.Format("Fib DP n = {0} solution {2} Elapsed Ms {1}", fibN2, elapsedMs2, fib2)); + + var palindrome = StringViewModel.IsStringPalindrome("Savvas"); var sorted = LinkedListViewModel.InsertItemInSortedList(linkedlist, new LinkedListNode(1)); var removed = LinkedListViewModel.RemoveDuplicatesFromSortedList(linkedlist); diff --git a/src/InterviewQuestions/ViewModels/RecursionViewModel.cs b/src/InterviewQuestions/ViewModels/RecursionViewModel.cs index 6654fe3..5405772 100644 --- a/src/InterviewQuestions/ViewModels/RecursionViewModel.cs +++ b/src/InterviewQuestions/ViewModels/RecursionViewModel.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Numerics; using System.Text; namespace InterviewQuestions.ViewModels @@ -17,5 +18,19 @@ public static int Fibonacci(int n) } } + public static BigInteger Fibonacci_DynamicProgramming(int n) + { + var F = new BigInteger[n + 1]; + F[0] = 0; + F[1] = 1; + + for (int i = 2; i < F.Length; i++) + { + F[i] = F[i - 1] + F[i - 2]; + } + + return F[n]; + } + } }