Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 递归方法,仅从上次递归调用返回值_C#_.net_Algorithm_Recursion - Fatal编程技术网

C# 递归方法,仅从上次递归调用返回值

C# 递归方法,仅从上次递归调用返回值,c#,.net,algorithm,recursion,C#,.net,Algorithm,Recursion,我有一个递归方法,它处理从流中检索的项。但是,我希望该方法仅在没有其他项目要处理时返回stream.NextPosition。但是,由于这是一种递归方法,编译器会抱怨并非所有代码路径都返回值。这是有意义的,因为递归调用不会返回任何内容。我如何处理这个问题,我只关心最后一次调用的返回值 public void Process() { int position = ProcessStream(0) } //recursive method public string ProcessSt

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

您必须在函数末尾返回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)
}

您必须在函数末尾返回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)
}

所以将if语句移到底部?不,在最后一行添加一个
return
。@Prabhu不,您可以保持一切原样,只需将
return
关键字放在递归调用之前。@hatchet是一个输入错误。修正了。哦,好吧,我误解了。因此,只需在末尾的ProcessStream调用前面添加return语句……将if语句移到底部?不,在最后一行添加一个
return
。@Prabhu不,您可以保持一切原样,只需将
return
关键字放在递归调用前面。@hatchet是一个打字错误。修正了。哦,好吧,我误解了。所以只需在末尾的ProcessStream调用前面添加return语句。。。