使这段代码递归的最佳方法是什么

时间:2011-10-23 00:32:52

标签: c# recursion

我必须编辑一些具有proposedDate的代码(作为名为minDate的DateTime对象)和一个禁止日期数组。给定建议的日期,它会尝试查看这是否有效(不是限制日期)。如果是停电日期,请继续检查第二天,直到找到不是有效结帐日期的日期。现有代码如下所示

if ( blackoutDates.Contains(minDate))
        {
            minDate = minDate.AddDays(1);
            dateOffset = dateOffset + 1;
            if ( blackoutDates.Contains(minDate))
            {
                minDate = minDate.AddDays(1);
                dateOffset = dateOffset + 1;
                if (blackoutDates.Contains(minDate))
                {
                    minDate = minDate.AddDays(1);
                    dateOffset = dateOffset + 1;
                }
            }
        }

显然这里有一个重复的模式,我试图找出清理此代码并使其优雅的最佳方法。

2 个答案:

答案 0 :(得分:4)

无需递归。你可以循环执行此操作。

while(blackoutDates.Contains(minData)){
  minData = minData.AddDays(1);
  ++dataOffset;
 }

我不知道这是什么语言,但请检查是否已经存在标准API以便首先执行您需要的操作。

答案 1 :(得分:1)

我不会让它递归。我会把它变成while循环:

while(blackoutDates.Contains(minDate))
{
    minDate = minDate.AddDays(1);
    dateOffset = dateOffset + 1;
}

递归可以表示循环,但循环结构在用于它们的上下文时通常更清晰。它们使得到达循环范围之外的数据比递归(特别是局部变量)更简单。