递归方法仅从最后一次递归调用返回值

时间:2014-07-18 19:29:00

标签: c# .net algorithm recursion

我有一个递归方法来处理从流中检索的项目。但是,我希望该方法仅在没有其他项要处理时返回stream.NextPosition。但是,由于这是一个递归方法,编译器会抱怨并非所有代码路径都返回一个值。有道理,因为递归调用没有返回任何东西。我如何处理这个问题,我只对最后一次调用的返回值感兴趣。

public void Process()
{
   int position = ProcessStream(0)  
}

//recursive method 
public string ProcessStream(int streamPosition)
{
   var stream = GetStream(streamPosition);

   if (stream.Items.count == 0)
     return stream.NextPosition;

   foreach(var item in stream.Items)
   {
      ProcessItem(item);
   }

   ProcessStream(stream.NextPosition)
}

1 个答案:

答案 0 :(得分:5)

您必须在功能结束时return ProcessStream(stream.NextPosition)

public string ProcessStream(int streamPosition)
{
    var stream = GetStream(streamPosition);

    if (stream.Items.count == 0)
        return stream.NextPosition;

    foreach(var item in stream.Items) {
        ProcessItem(item);
    }

    return ProcessStream(stream.NextPosition)
}