我理解尾递归,因为它的功能与迭代类似,在方法调用本身的末尾使用新参数。但是,当在循环末尾的代码之前放置递归调用时,为什么它不无限地调用 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/