使用引用参数传递跟踪递归算法

时间:2012-01-30 11:44:59

标签: c# c++ algorithm

传递的引用参数是调用者和被调用者之间的共享项。 这个项目是否共享函数的递归调用?

假设这种合并排序算法:

MergeSort(ref int[]S)
{
    .
    .
    .
    MergeSort(ref S1);
    MergeSort(ref S2);
    Merge(S1,S2,S);
}

通过跟踪S = {2,3,1,0}的算法,我们得到:

                2,3,0,1
        2,3                 1,0
      2     3             1     0

在算法结束时,编译器将在第二级树中合并为S,合并(0,1)和(2,3)并创建(0,1,2,3)。

我们只有一个共享的S数组,编译器如何合并2个S数组并合并它们? 所以S不分享??

提前致谢

1 个答案:

答案 0 :(得分:1)

对象在每次递归调用中通过引用 BUT 传递,变量 S点[引用]为不同的宾语。因此,每个merge()实际上都是在不同的对象上进行的。