C#数据结构与算法系列(十二):递归(Recursion)
1.介绍
简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时也让代码变得整洁
2.规则
执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
方法的局部变量是独立的,不会相互影响,比如n变量
如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据
递归必须向退出递归条件逼近,否则就是无限递归了,出现StackOverflowError,死龟
当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕
3.递归能解决什么问题
1.各种数学问题如:八皇后问题,汉诺塔,阶乘问题,迷宫问题等
2.各种算法也会使用到递归,比如快排、归并排序,二分查找,分治算法
4.示例:打印问题、阶乘问题
1.图解:
2.代码示例
public class RecursionTest { public static void Test(int num) { if (num > 2) { Test(num - 1); } System.Console.WriteLine("num=" + num); } public static int Factorial(int num) { if (num == 1) { return 1; } return Factorial(num - 1) * num; } public static void RecursionDemo() { Test(4); System.Console.WriteLine("\n5的阶乘是:"+Factorial(5)); } }
3.演示图
微信:17873041739