From 8528ae224e517c015e3fd032d00ce76a94cbf497 Mon Sep 17 00:00:00 2001 From: hpstory <33348162+hpstory@users.noreply.github.com> Date: Mon, 28 Aug 2023 13:36:41 +0800 Subject: [PATCH] feat(csharp): add the section of iteration and recursion (#697) --- codes/csharp/GlobalUsing.cs | 3 +- .../iteration.cs | 77 +++++++++++++++++++ .../recursion.cs | 56 ++++++++++++++ 3 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 codes/csharp/chapter_computational_complexity/iteration.cs create mode 100644 codes/csharp/chapter_computational_complexity/recursion.cs diff --git a/codes/csharp/GlobalUsing.cs b/codes/csharp/GlobalUsing.cs index fb4c84fcb..402066ff4 100644 --- a/codes/csharp/GlobalUsing.cs +++ b/codes/csharp/GlobalUsing.cs @@ -1,2 +1,3 @@ global using NUnit.Framework; -global using hello_algo.utils; \ No newline at end of file +global using hello_algo.utils; +global using System.Text; \ No newline at end of file diff --git a/codes/csharp/chapter_computational_complexity/iteration.cs b/codes/csharp/chapter_computational_complexity/iteration.cs new file mode 100644 index 000000000..e4b851ae2 --- /dev/null +++ b/codes/csharp/chapter_computational_complexity/iteration.cs @@ -0,0 +1,77 @@ +/** +* File: iteration.cs +* Created Time: 2023-08-28 +* Author: hpstory (hpstory1024@163.com) +*/ + +namespace hello_algo.chapter_computational_complexity; + +public class iteration { + /* for 循环 */ + public int forLoop(int n) { + int res = 0; + // 循环求和 1, 2, ..., n-1, n + for (int i = 1; i <= n; i++) { + res += i; + } + return res; + } + + /* while 循环 */ + public int whileLoop(int n) { + int res = 0; + int i = 1; // 初始化条件变量 + // 循环求和 1, 2, ..., n-1, n + while (i <= n) { + res += i; + i += 1; // 更新条件变量 + } + return res; + } + + /* while 循环(两次更新) */ + public int whileLoopII(int n) { + int res = 0; + int i = 1; // 初始化条件变量 + // 循环求和 1, 2, 4, 5... + while (i <= n) { + res += i; + i += 1; // 更新条件变量 + res += i; + i *= 2; // 更新条件变量 + } + return res; + } + + /* 双层 for 循环 */ + public string nestedForLoop(int n) { + StringBuilder res = new StringBuilder(); + // 循环 i = 1, 2, ..., n-1, n + for (int i = 1; i <= n; i++) { + // 循环 j = 1, 2, ..., n-1, n + for (int j = 1; j <= n; j++) { + res.Append($"({i}, {j}), "); + } + } + return res.ToString(); + } + + /* Driver Code */ + [Test] + public void Test() { + int n = 5; + int res; + + res = forLoop(n); + Console.WriteLine("\nfor 循环的求和结果 res = " + res); + + res = whileLoop(n); + Console.WriteLine("\nwhile 循环的求和结果 res = " + res); + + res = whileLoopII(n); + Console.WriteLine("\nwhile 循环(两次更新)求和结果 res = " + res); + + string resStr = nestedForLoop(n); + Console.WriteLine("\n双层 for 循环的遍历结果 " + resStr); + } +} diff --git a/codes/csharp/chapter_computational_complexity/recursion.cs b/codes/csharp/chapter_computational_complexity/recursion.cs new file mode 100644 index 000000000..932624eeb --- /dev/null +++ b/codes/csharp/chapter_computational_complexity/recursion.cs @@ -0,0 +1,56 @@ +/** +* File: recursion.cs +* Created Time: 2023-08-28 +* Author: hpstory (hpstory1024@163.com) +*/ + +namespace hello_algo.chapter_computational_complexity; + +public class recursion { + /* 递归 */ + public int recur(int n) { + // 终止条件 + if (n == 1) + return 1; + // 递:递归调用 + int res = recur(n - 1); + // 归:返回结果 + return n + res; + } + + /* 尾递归 */ + public int tailRecur(int n, int res) { + // 终止条件 + if (n == 0) + return res; + // 尾递归调用 + return tailRecur(n - 1, res + n); + } + + /* 斐波那契数列:递归 */ + public int fib(int n) { + // 终止条件 f(1) = 0, f(2) = 1 + if (n == 1 || n == 2) + return n - 1; + // 递归调用 f(n) = f(n-1) + f(n-2) + int res = fib(n - 1) + fib(n - 2); + // 返回结果 f(n) + return res; + } + + /* Driver Code */ + [Test] + public void Test() { + int n = 5; + int res; + + res = recur(n); + Console.WriteLine("\n递归函数的求和结果 res = " + res); + + res = tailRecur(n, 0); + Console.WriteLine("\n尾递归函数的求和结果 res = " + res); + + res = fib(n); + Console.WriteLine("\n斐波那契数列的第 " + n + " 项为 " + res); + } +}