传递的引用参数是调用者和被调用者之间的共享项。 这个项目是否共享函数的递归调用?
假设这种合并排序算法:
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不分享??
提前致谢
答案 0 :(得分:1)
对象在每次递归调用中通过引用 BUT 传递,变量 S
点[引用]为不同的宾语。因此,每个merge()
实际上都是在不同的对象上进行的。