示例 - 我无法想象下面提到的代码如何工作,假设它有另外一种情况,其中一个案例返回int值,其余的返回方法()本身。有人可以解释会发生什么吗?
public static int method(){
return method(); //how does this line work?
}
答案 0 :(得分:2)
这称为递归 - 一种自我执行的方法(可以多次)。 关于递归的一个重要的事情是它需要一个停止条件,否则它是一个无限递归并且会产生运行时错误。
您提供的代码将导致无限递归,因此最终(非常快,但最终)您将获得StackOverflowException
。
递归的典型例子是计算阶乘(如果你不记得它是如何工作的,5!= 5 * 4 * 3 * 2 * 1)。
因此,阶乘递归方法的实现将是这样的:
Int64 Factorial(int input)
{
if(input < 0)
{
throw new ArgumentOutOfRangeException("Input must be 0 or higher.");
}
if(input < 2)
{
return 1;
}
return input * Factorial(input - 1);
}
注意:0! = 1,负值对于factorial无效,并且该方法返回Int64以避免数学溢出。
现在,假设您使用数字3调用此方法:
Factorial(3)
将返回3 * Factorial(3-1)
同样,Factorial(2)
将返回2 * Factorial(2-1)
Factorial(1)
只会返回1
将所有内容Factorial(3)
放在一起将返回3 * 2 * 1
3!
。
答案 1 :(得分:0)
代码会编译,但最有可能导致堆栈溢出。你基本上创建了一个recursive function,没有一个退出子句,这很糟糕。要回答你的问题,会发生什么:
...
Stack Overflow:你达到了堆栈的最大大小。
(注意:我说很可能是因为你可以增加堆栈大小,内存耗尽,或者其他线程可以先终止,等等。)