mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	feat(csharp): add the section of iteration and recursion (#697)
This commit is contained in:
		@ -1,2 +1,3 @@
 | 
				
			|||||||
global using NUnit.Framework;
 | 
					global using NUnit.Framework;
 | 
				
			||||||
global using hello_algo.utils;
 | 
					global using hello_algo.utils;
 | 
				
			||||||
 | 
					global using System.Text;
 | 
				
			||||||
							
								
								
									
										77
									
								
								codes/csharp/chapter_computational_complexity/iteration.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								codes/csharp/chapter_computational_complexity/iteration.cs
									
									
									
									
									
										Normal file
									
								
							@ -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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										56
									
								
								codes/csharp/chapter_computational_complexity/recursion.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								codes/csharp/chapter_computational_complexity/recursion.cs
									
									
									
									
									
										Normal file
									
								
							@ -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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user