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

本文关键字:方法 是什么 递归 段代码 代码 | 更新日期: 2023-09-27 18:12:00

我必须编辑一些代码,其中包含一个拟议日期(作为一个名为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;
                }
            }
        }

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

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

不需要递归。您可以在循环中执行此操作。

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

我不知道这是什么语言,但是检查一下是否已经有一个标准的API来做你首先需要的。

我不会让它递归。我将使它成为while循环:

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

递归可以表示循环,但循环结构通常在其设计的上下文中使用时更清晰。它们还使访问循环作用域之外的数据比递归更简单(特别是局部变量)。