递归调用
递归调用就是函数自己调用自己。
下面例子从函数执行控制角度分析递归的执行顺序:
using System; namespace Demo { class Program { static void Main(string[] args) { InvokeSelfVoid(5); Console.WriteLine(InvokeSelf(5)); } //无返回值 public static void InvokeSelfVoid(int i) { if (i > 0) { i--; InvokeSelfVoid(i); } Console.WriteLine(i); } //执行之后,控制权交到InvokeSelfVoid(i)处,最后交到InvokeSelfVoid(5)处 //有返回值 public static int InvokeSelf(int i) { if (i > 0) { i--; Console.WriteLine(InvokeSelf(i)); } return i; //执行之后,控制权交到InvoikeSelf(i)处,最后交到InvokeSelf(5)处 } } }
InvokeSelfVoid 和 InvokeSelf 是分别是无返回值和有返回值的递归调用方法。
InvokeSelfVoid执行方法闭合"}"之后,控制权交到InvokeSelfVoid(i)处,最后交到InvokeSelfVoid(5)处。
同理,InvokeSelf执行return之后,控制权交到InvokeSelf(i)处,最后交到InvokeSelf(5)处。
控制台输出结果为:0 0 1 2 3 4 0 0 1 2 3 4