好久沒用遞迴了,趕快找個簡單的題目複習一下,不然都要忘光光了,熟悉一下之前的Feel ~
順便練習一下簡單工廠模式,首先設計介面ICompute.cs
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
interface ICompute { /// <summary> /// 1 + ... + N = ? /// </summary> /// <param name="n"></param> /// <returns>Answer</returns> Int64 Iterative(Int64 n); /// <summary> /// 1 - 2 + 3 ... + N = ? /// </summary> /// <param name="n"></param> /// <returns>Answer</returns> Int64 AdvancedIterative(Int64 n); /// <summary> /// 1 x 2 x ... x N = ? /// </summary> /// <param name="n"></param> /// <returns>Answer</returns> Int64 Factorial(Int64 n); /// <summary> /// Fn = Fn-1 + Fn-2 /// </summary> /// <param name="n"></param> /// <returns>Answer</returns> Int64 Fibonacci(Int64 n); } |
接著建立兩個類別Recursive.cs
與ForLoop.cs
並繼承ICompute.cs
實作其方法:
- Recursive.cs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950public class Recursive : ICompute{public Int64 Iterative(Int64 n){if (n == 1){return n;}else{return n + Iterative(n - 1);}}public Int64 AdvancedIterative(Int64 n){if (n == 1){return n;}else{return n % 2 == 0 ? -n + AdvancedIterative(n - 1) : n + AdvancedIterative(n - 1);}}public Int64 Factorial(Int64 n){if (n == 1){return n;}else{return n * Factorial(n - 1);}}public Int64 Fibonacci(Int64 n){if (n < 3){return 1;}else{return Fibonacci(n - 1) + Fibonacci(n - 2);}}} - ForLoop.cs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768public class ForLoop : ICompute{public Int64 Iterative(Int64 n){int ans = 0;for (int i = 1; i <= n; i++){ans += i;}return ans;}public Int64 AdvancedIterative(Int64 n){int ans = 0;for (int i = 1; i <= n; i++){if (i % 2 == 0){ans -= i;}else{ans += i;}}return ans;}public Int64 Factorial(Int64 n){int ans = 1;for (int i = 1; i <= n; i++){ans *= i;}return ans;}public Int64 Fibonacci(Int64 n){int ans = 0;int[] arr = new int[2] { 1, 1 };for (int i = 1; i <= n; i++){if (i < 3){ans = 1;}else{ans = arr[0] + arr[1];arr[0] = arr[1];arr[1] = ans;}}return ans;}}
接著在Program.cs
裡面寫一個Run的方法來呼叫剛剛寫好的兩個類別:
1 2 3 4 5 6 7 |
static void Run(int n, ICompute compute) { Console.WriteLine("1 + ... + N = {1}", n, compute.Iterative(n)); Console.WriteLine("1 - 2 + 3 ... + N = {1}", n, compute.AdvancedIterative(n)); Console.WriteLine("N! = {1}", n, compute.Factorial(n)); Console.WriteLine("Fn = Fn-1 + Fn-2, n = {0}, Ans = {1}", n, compute.Fibonacci(n)); } |
這樣就完成囉 !!