0
嗨,我有一個關於遞歸算法的問題。 此代碼運行時間過長。我已經從互聯網搜索,我有一個計劃,將算法從遞歸更改爲迭代。因爲沒有「返回」條件(它總是循環,直到年份,類型,操作,位置,部門和位置的列表完成),所以我很難更改代碼。將遞歸算法轉換爲迭代算法
如何更改算法?
這裏是代碼:
DataSet dataSet = new DataSet();
var years = GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { string.Empty }, group);
foreach (var year in years)
{
var types = GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { year.Year.ToString() }, group);
foreach (var type in types)
{
var departments = GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { year.Year.ToString(), type.ContractorType }, group);
foreach (var department in departments)
{
var operations = GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { year.Year.ToString(), type.ContractorType, department.Department }, group);
foreach (var operation in operations)
{
var positions = GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { year.Year.ToString(), type.ContractorType, department.Department, operation.Operation }, group);
foreach (var position in positions)
{
var locations = GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { year.Year.ToString(), type.ContractorType, department.Department, operation.Operation, position.Position }, group);
foreach (var location in locations)
{
DataTable tbl = ReportExport.ConvertToDataTable<ReportMonthlyFTE>(
GetDataForReportMonthlyFTEWorkCompletionByDepartment(new string[] { year.Year.ToString(), type.ContractorType, department.Department, operation.Operation, position.Position, location.Location }, group).ToList());
dataSet.Tables.Add(tbl);
}
}
}
}
}
}
我認爲你是混淆迭代和遞歸。你發佈的代碼是完全迭代的。它使用for循環而不是調用自己 – codingadventures 2015-03-25 02:27:52
GetDataForReportMonthlyFTEWorkCompletionByDepartment()做什麼?它被調用了很多,可能是你的性能問題的原因。 – 2015-03-25 02:28:58
感謝您的答覆,函數GetDataForReportMonthlyFTEWorkCompletionByDepartment()從sql服務器調用查詢(選擇)根據給出的參數 – user3425864 2015-03-25 02:34:29