【发布时间】:2025-11-28 18:15:02
【问题描述】:
我有一个问题——在递归函数 BT() 的基本条件中传递引用的这两种类型有什么区别? (在基础条件的 cmets 中提到)。
import java.util.*;
public class Main
{
public static void main(String[] args) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
BT(res,temp,1,4,2);
System.out.print(res);
}
public static void BT(List<List<Integer>> res,List<Integer> temp,int start , int n , int k ){
if(temp.size()==k){
res.add(temp); // here we are just directly passing the temp refrence.
return;
}
for(int i=start;i<=n;i++){
temp.add(i);
BT(res,temp,i+1,n,k);
System.out.println("Temp "+temp);
temp.remove(temp.size()-1);
}
}
}
import java.util.*;
public class Main
{
public static void main(String[] args) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
BT(res,temp,1,4,2);
System.out.print(res);
}
public static void BT(List<List<Integer>> res,List<Integer> temp,int start , int n , int k ){
if(temp.size()==k){
res.add(new ArrayList(temp)); // here we are passing a new object in which temp reference is passed
return;
}
for(int i=start;i<=n;i++){
temp.add(i);
BT(res,temp,i+1,n,k);
System.out.println("Temp "+temp);
temp.remove(temp.size()-1);
}
}
}
-
以上两个链接中的哪个在基本条件下具有临时列表的浅拷贝和深拷贝?
-
是不是因为我们在第一个链接 (https://ideone.com/MuLzLb) 中直接传递了参考 temp,所以我们在 temp 中所做的最后一次更改将在 List
- 中添加的所有结果中可见res ie [[], [], [], [], [], []] 因为 temp 在最后一次递归调用结束时将是一个空列表?
-
以及如何决定何时在递归函数中使用引用的深拷贝或浅拷贝?
【问题讨论】:
标签: java reference deep-copy recurrence shallow-copy