【发布时间】:2014-03-23 23:40:41
【问题描述】:
我理解尾递归,因为它的功能类似于迭代,在方法调用本身结束时使用新参数。但是当在循环结束的代码之前放置一个递归调用时,为什么它不无限地调用它呢?在下面的代码中,方法 MergeSort_Recursive() 在同一方法中调用自身两次。怎样才能达到对该方法的第二次调用?当第一次调用该方法时,它将比较右>左,然后初始化中间。然后它会调用自己,我们回到方法的顶部,再次进行右>左比较,再次初始化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);
}
}
【问题讨论】:
-
您可以使用调试器逐步完成此操作,并亲自查看递归结束的原因。