递归:显示从a到b的数字,并显示它们的总和

rea*_*tor 2 c# recursion

我想知道,总和来自哪里?我知道递归是什么,但我无法弄清楚如何int i获得总和.我已经读过关于堆栈......但我仍然不明白.请帮忙:)这里是代码:

static void Main(string[] args)
{
    int i = RecursiveMethod(1,3);
    //Console.ReadLine();
}

static int RecursiveMethod(int a, int b)
{
    Console.WriteLine(a);
    if (a == b)
    {
        return a;
    }
    else 
    {
        return a + RecursiveMethod(a + 1, b);
    }
}
Run Code Online (Sandbox Code Playgroud)

Sel*_*enç 5

让我们一步一步地看到你打电话时发生的事情 RecursiveMethod(1,3);

  1. 代码进入else分支因为a不等于b
  2. 呼叫 RecursiveMethod(2,3)
  3. 代码再次进入else分支,因为a不等于b
  4. 呼叫 RecursiveMethod(3,3)
  5. if条件得到满足,我们遇到了第一个返回的返回 3
  6. 现在我们在第2步的else分支中因为RecursiveMethod(3,3)返回了.第2步是这样的:return 2 + RecursiveMethod(3,3)所以它变成:2 + 3然后它返回5
  7. 现在我们来到最后一个回归,我们在第1步,没有更多的内部回报了.第2步返回5所以return 1 + 5=6

每次递归调用都会更深入一级.您必须在某个时刻点击返回,否则该方法将继续被调用,最终您将得到一个StackOverFlowException.这是因为每个方法都有一个堆栈,用于保存参数,局部变量和其他东西,当你继续调用函数时,所有这些值将被反复推送到堆栈中,对于每次调用,最终你将耗尽堆栈空间.

您点击的返回语句数应该等于您进行的递归调用的数量.不包括返回给调用者的最后一个返回.在上面的函数中,我们进行了两次递归调用,我们点击了2次返回,最后一次返回Main.