【问题标题】: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 关键字来实现。
【解决方案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#