以下代碼用于上述要求。但是我沒有得到正確的輸出。我在遞回中傳遞的輸入串列有問題
import java.util.ArrayList;
import java.util.Collections;
public class abc
{
public static void m(ArrayList<Integer> op, ArrayList<Integer> ip) {
if(ip.size()==0) {
System.out.println(op);
return;
}
ArrayList<Integer> l1=new ArrayList<Integer>();
ArrayList<Integer> l2=new ArrayList<Integer>();
l1.addAll(op);
l2.addAll(op);
l1.add(ip.get(0));
ip.remove(0);
m(l2,ip);
m(l1,ip);
}
public static void main(String[] args) {
Integer [] z = {1,3,2};
ArrayList<Integer> ip=new ArrayList<Integer>();
Collections.addAll(ip, z);
ArrayList<Integer> op=new ArrayList<Integer>();
m(op,ip);
}
}
uj5u.com熱心網友回復:
問題不在于,正如您在評論中所說,串列 ip 保留了前一個函式呼叫的元素。問題是您沒有為下一個函式呼叫創建一個新的arraylist 作為 ip 引數,這意味著,因為它是通過參考呼叫的,所以您洗掉了另一個函式呼叫中已經存在的一個函式呼叫的元素。您可以通過為新函式呼叫創建一個新陣列串列來解決此問題,就像您已經為 op 所做的那樣。但是你也可以使用這個:
m(l2,new ArrayList<>(ip));
m(l1,new ArrayList<>(ip));
所以你不必使用額外的 addAll() ;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/493578.html
上一篇:python函式中的遞回呼叫
下一篇:MYSQL遞回cte查詢性能緩慢
