遞歸調用就是函數本身調用本身。函數
下面例子從函數執行控制角度分析遞歸的執行順序:spa
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 是分別是無返回值和有返回值的遞歸調用方法。code
InvokeSelfVoid執行方法閉合"}"以後,控制權交到InvokeSelfVoid(i)處,最後交到InvokeSelfVoid(5)處。blog
同理,InvokeSelf執行return以後,控制權交到InvokeSelf(i)處,最後交到InvokeSelf(5)處。遞歸
控制檯輸出結果爲:0 0 1 2 3 4 0 0 1 2 3 4string