我总是很难理解它们何时是函数体内的多个递归函数。 让我们以合并排序为例。
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)
我正在用Java语言实现
因此,如果我们采用像javascript这样的单线程环境,它将如何跟踪这种情况下的多个值。
如
调用mergeSort(array,0,2)时,控件应再次流到相同的函数,并且它下面的第二个递归合并函数的左值和右值应丢失,但第二个递归函数以某种方式获得的值left = 3 right =5。所以两个函数并行运行。
简而言之,运行时如何跟踪left和right的多个值。