遞歸是編程中一種強大的技術,在C#中實現遞歸函數有其獨特的優勢;
1、優點:
(1)可以用少量代碼表達復雜的邏輯,如數學公式可以直接轉換為代碼;
(2)簡化復雜算法;
2、缺點:
(1)每次方法調用都會產生棧幀開銷(參數傳遞、返回地址等);
(2)深度遞歸可能導致棧溢出風險(StackOverflowException);
(3)深度遞歸調試難度大,邏輯錯誤可能導致難以診斷;
下面簡單以多層文件復制為例,介紹遞歸函數使用方法:
public bool CopyDirectoryFile(DirectoryInfo dirSource, DirectoryInfo dirTarget, string NotDir = "")
{
bool RetState = false;
try
{
if (Directory.Exists(dirTarget.FullName) == false)
{
Directory.CreateDirectory(dirTarget.FullName);
}
foreach (FileInfo fi in dirSource.GetFiles())
{
string path = Path.Combine(dirTarget.ToString(), fi.Name.ToUpper());
if (File.Exists(path))
fi.CopyTo(path, true);
}
foreach (DirectoryInfo diSourceSubDir in dirSource.GetDirectories())
{
if (diSourceSubDir.Name == NotDir) continue;
DirectoryInfo nextTargetSubDir = dirTarget.CreateSubdirectory(diSourceSubDir.Name);
CopyDirectoryFile(diSourceSubDir, nextTargetSubDir);
}
RetState = true;
}
catch (Exception)
{
RetState = false;
}
return RetState;
}
閱讀原文:原文鏈接
該文章在 2025/7/21 10:27:15 編輯過