java - 方法结束之前的递归不是无限循环?

标签 java recursion

我理解尾递归,因为它的功能与迭代类似,在方法调用本身的末尾使用新参数。但是,当在循环末尾的代码之前放置递归调用时,为什么它不无限地调用 self 呢?在下面的代码中,方法 MergeSort_Recursive() 在同一方法中调用自身两次。对该方法的第二次调用将如何进行?当第一次调用该方法时,它将比较右 > 左,然后初始化 mid。然后它调用自身,我们转到方法的顶部,该方法将再次进行右>左比较,再次初始化 mid,然后再次调用自身并不断重复此步骤。我当然知道这不是它的工作原理,否则这个方法就会失败。所以我的问题是这是如何工作的,以及这两个方法最终如何被调用?

static public void MergeSort_Recursive(int [] numbers, int left, int right)
{
  int mid;

  if (right > left)
  {
    mid = (right + left) / 2;
    MergeSort_Recursive(numbers, left, mid);
    MergeSort_Recursive(numbers, (mid + 1), right);

    DoMerge(numbers, left, (mid+1), right);
  }
}

最佳答案

在某些情况下,right > left 为 false。然后,该函数没有调用自身一次,因此它成功返回。

关于java - 方法结束之前的递归不是无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598647/

相关文章:

java - 使用支架和单独的线程在 Canvas 上绘图不会在屏幕上显示任何内容

windows - 为什么递归 (/R) for 循环在 Windows 批处理文件中有奇怪的行为

list - 将列表组合推广到 N 个列表

java - 如何使用 Comparator 类来处理 double 对象的数据标记?

java - 带有对象的ArrayList,查找重复的对象字段

java - 基本 Java Swing,如何退出和处理您的应用程序/JFrame

java - 如何知道垃圾收集器是否在我的应用程序运行时运行?

ios - 从 JSON 中获取递归的 NSDictionaries 和 NSArray

recursion - Scheme中的尾递归帕斯卡三角形

java - 继承和递归