【问题标题】:Return Type for recursion in c#c#中递归的返回类型
【发布时间】:2014-04-17 17:01:56
【问题描述】:

我们应该在 c# 中使用哪种返回类型?是否可以在 c# 中使用“void”返回类型进行递归?

我有一个返回类型为void的函数,但是当我调用它时,它会递归地进行无限循环,那么有什么更好的解决方案:

我正在使用如下所述的功能:

void A()
{
  //Some code
  A()
}

【问题讨论】:

  • 返回类型无关紧要;重要的是逻辑。

标签: c# recursion return-type


【解决方案1】:

当你调用同一个函数时,很明显它会进入无限循环。满足条件后,您需要退出此循环,这可以通过使用 break 关键字来实现。

【讨论】:

  • break 不会让你脱离递归造成的无限循环。
【解决方案2】:

每个递归方法序列都必须以某种方式终止。递归方法的第一部分通常会有一个分支来测试是否满足条件。以这种方式,递归方法继续进行,直到获得结果。 例如

static int Recursive(int value)
    {       
    if (value >= 10)
    {
        // throw new Exception("End");
        return value;
    }
    return Recursive(value + 1);
    }

与返回类型无关。如果未提供条件,您的函数将进入无限循环

【讨论】:

    【解决方案3】:

    我认为您对递归的理解需要加强。

    仔细看看Recursion

    尽管递归很有用,但您可以轻松地创建递归 永远不会返回结果且无法到达端点的函数。 这样的递归会导致计算机执行一个无限循环。

    递归可能出现的另一个问题是递归 函数可以使用所有可用资源(如系统内存 和堆栈空间)。每次递归函数调用自身(或 调用另一个调用原始函数的函数),它使用一些 资源。这些资源在递归函数时被释放 退出,但可能使用具有太多递归级别的函数 所有可用的资源。发生这种情况时,一个例外是 扔了。

    您的问题不是返回类型。你需要有一些规则来结束递归,比如说一个深度的 recustion 调用,或者多个目录作为递归的最大值。

    也许也可以看看Recursive methods using C#

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 2013-02-26
      • 2018-04-22
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 1970-01-01
      相关资源
      最近更新 更多