只从上次递归调用返回值的递归方法

本文关键字:返回值 递归方法 调用 递归 | 更新日期: 2023-09-27 18:13:29

我有一个递归方法,它处理从流中检索到的项。但是,我希望该方法返回流。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)
}

只从上次递归调用返回值的递归方法

必须在函数结束时使用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)
}