例如,分割步骤将列表[2, 9, 8, 5, 3, 4, 7, 6]分成两个列表,如[2, 9, 8, 5]和[3, 4, 7, 6],然后传递给两个递归函数调用。...只有一个数字的列表自然是按顺序排列的。将两个排序好的列表合并成一个更大的排序好的列表涉及查看两个较小列表的开头,并将较小的值附加到较大的列表上。图 5-4 显示了合并[2, 9]和[5, 8]的示例。...在合并阶段中重复执行此操作,直到最终结果是原始的mergeSort()调用以排序顺序返回完整列表。
图 5-4:合并步骤比较较小排序列表开头的两个值,并将它们移动到较大的排序列表中。...第一个基本情况发生在openRem和closeRem都为0且没有更多的括号要添加到current字符串时。第二个基本情况发生在两个递归情况在添加开放和/或关闭括号后接收到平衡括号字符串列表之后。...这些程序有两个递归情况,当n参数为偶数或奇数时。这没问题:只要所有递归情况都将递归函数调用的返回值作为它们的最后操作,函数就可以使用尾调用优化。