多个递归函数的控制流如何工作

时间:2019-05-08 08:15:53

标签: javascript algorithm sorting

我总是很难理解它们何时是函数体内的多个递归函数。 让我们以合并排序为例。

array = [2,4,5,6,7]
function mergeSort(array, left, right){ 
  if(left < right){
    mid = left + (right - left)/2;
    mergeSort(array, left, mid);
    mergeSort(array, mid+1, right);
    // rest of code
    ...
 }

首先,我知道函数调用堆栈如何工作。  在这里,第一个合并排序将以这种方式调用自己。

用于第一次合并排序的函数调用堆栈。

  • mergeSort(array,0,1);

  • mergeSort(array,0,2)

    我不明白第二个合并排序将如何工作。 虽然当我记录结果时它返回以下内容。

  • mergeSort(array,3,4)

  • mergeSort(array,3,5);

我正在用Java语言实现
因此,如果我们采用像javascript这样的单线程环境,它将如何跟踪这种情况下的多个值。 如 调用mergeSort(array,0,2)时,控件应再次流到相同的函数,并且它下面的第二个递归合并函数的左值和右值应丢失,但第二个递归函数以某种方式获得的值left = 3 right =5。所以两个函数并行运行。

简而言之,运行时如何跟踪left和right的多个值。

0 个答案:

没有答案