Chapter 7. 递归
一、概念 conception
函数体内调用本函数自身,直到符合某一条件不再继续调用。
二、应满足条件 factor
1、有反复执行的过程(调用自身);
2、有跳出反复执行过程的条件(函数出口);
三、例子 example
/// <summary> /// 计算阶乘:n!=n*(n-1)*(n-2)*(n-3)*......*1(n>0) /// </summary> /// <param name="i"></param> /// <returns></returns> public int recursion(int i) { int sum = 0; if(i==1) { return i; } sum = i * recursion(i-1); return sum; } static void Main(string[] args) { Program digui = new Program(); Console.WriteLine("5的阶乘:"+digui.recursion(5)); Console.ReadLine(); }
四、注意事项 notice
1、递归中必须要存在一个循环结束的条件
2、递归函数的每次调用都需要栈来存储,如果次数太多的话容易造成栈溢出。
五、练习
/// <summary> /// 一群羊赶到各村去卖,每过一个村丢失之前总数的一半零一只, /// 过了7个村之后还剩2只,问最初赶出多少只羊 /// </summary> /// <param name="village"></param> /// <returns></returns> public int Sheep (int village) { int sum = 0; if(village==7) { return 2; } sum = 2 * (Sheep(village+1)+1); return sum; } static void Main(string[] args) { Program hanshu = new Program(); double x = hanshu.Sheep(0); Console.WriteLine("递归求羊:"+x); Console.ReadLine(); }