c#递归方法中的返回值

时间:2011-11-07 14:53:26

标签: c# .net return-value

冒着听起来愚蠢的风险,为什么当条件块等于true时,以下方法返回结果而不是值1?

public long Recursive(int Input)
{
    if (Input <= 1)
        return 1;
    else
        return Input * Recursive(Input - 1);
}

5 个答案:

答案 0 :(得分:11)

它确实在Input == 1

点返回1

但返回的1与先前调用一起使用,乘以Input,其返回值与先前调用一起使用,乘以Input,其返回值与先前的呼叫,乘以Input,其返回值与先前的呼叫一起使用,乘以Input ...直到您回到第一次呼叫Recursive

尝试查看使用值Recursive致电3时会发生什么:

 - input is not 1, so it calls Recursive with the value 2
   - input is not 1, so it calls Recursive with the value 1
     - input is 1, 1 is returned
   - 2 * 1 is returned
 - 3 * 2 is returned

答案 1 :(得分:4)

通过一个简单的例子:递归(2)

invoke Recursive(2)
if(input <= 1) evaluates to false
so the else block is executed and the return value is 2 * Recursive(2 - 1)
invoke Recursive(1)
if(input <= 1) evaluates to true
so the return value of Recursive(2 - 1) is 1
thus the return value of Recursive(2) is 2 * 1 = 2

让我们通过另一个:递归(3)

invoke Recursive(3)
if(input <= 1) evalues to false
so the else block is executed adn the return value is 3 * Recursive(3 - 1)
but we just showed Recursive(2) evaluates to 2
so the return value of Recursive(3) is 3 * 2 = 6

答案 2 :(得分:2)

没有。它返回1,正如预期的那样,然后返回值返回调用堆栈并更改。

答案 3 :(得分:2)

它将返回Input的阶乘。

递归是解决许多类型问题的常用技巧。 根据维基百科

“计算机科学中的递归是一种方法,其中问题的解决方案取决于同一问题的较小实例的解决方案。该方法可以应用于许多类型的问题,并且是计算机科学的核心思想之一” 。

以下Scheme代码段将帮助您了解递归的工作原理。

enter image description here

答案 4 :(得分:0)

为 $ReturnValue1 设置监视并通过调试循环查看结果相乘。