遞歸就是程序本身調用本身( recursion)算法
通常來講,遞歸須要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不知足時,遞歸前進;當邊界條件知足時,遞歸返回。 spa
1.趣味問題——年齡。3d
有5我的坐在一塊兒,問第五我的多少歲?他說比第4我的大2歲。問第4我的歲數,他說比第3我的大2歲。問第三我的,又說比第2人大兩歲。問第2我的,說比第一我的大兩歲。最後問第一我的,他說是10歲。請問第五我的多大?用遞歸算法實現。code
能夠用循環解釋這道題orm
static int GetAge(int num) { int age = 10; while (num>1) { age += 2; num -= 1; } return age; }
換成遞歸blog
static int GetAge(int num) { if (num==1) return 10;
return GetAge(num-1)+2; }
若是換成尾遞歸遞歸
static int GetAge(int num,int acc) { if (num == 1) return acc; return GetAge(num-1,acc+2); }
3.應用場景內存
刪除指定路徑下的文件夾裏內容以及子文件夾以及子文件夾內容string
static void DeleteFolder(string dir) { foreach (string d in Directory.GetFileSystemEntries(dir)) { //判斷路徑是否存在 if (File.Exists(d)) { FileInfo fi = new FileInfo(d); //去除文件夾的只讀屬性 if (fi.Attributes.ToString().IndexOf("ReadOnly") != -1) fi.Attributes = FileAttributes.Normal; File.Delete(d);//直接刪除其中的文件 } else { DirectoryInfo d1 = new DirectoryInfo(d); if (d1.GetFiles().Length != 0) { DeleteFolder(d1.FullName);////遞歸刪除子文件夾 } Directory.Delete(d); } } }
4.結io
通常樹狀結構的均可以使用遞歸查詢,好比 查詢地區,樹狀的菜單等等,遞歸比普通的算法耗內存,謹慎使用。還有一種叫做「尾遞歸」就是把上一個方法的返回值看成參數傳給下一個方法,不用像遞歸再向上返回。