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

标签 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);
    }
}

最佳答案

让我们逐步了解当您调用 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。这是因为每个方法都有一个堆栈来保存参数、局部变量和其他东西,当你继续调用函数时,所有这些值都会被一次又一次地压入堆栈,对于每次调用,最终你会用完堆栈空间。

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

关于c# - 递归:显示从 a 到 b 的数字,并显示它们的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52081965/

相关文章:

c# - EntityFramework 可以一次发送所有查询吗?

c# - 如何与System.Windows.Interactivity一起使用MvvmLight?

c# - 获取 C# 类名称列表?

javascript - 如何从递归函数中中断和返回?

c++ - 递归矩阵乘法算法计算失败

c# - 如何通过 out 参数将变量从 iOS native 代码返回到 C#?

c# - 迁移到异步 : Repository

php - 类别和子类别的递归函数

python - 字典中的递归

java - Java 中的递归和链表