在Java中實現笛卡爾積的遞歸方式可以通過一個遞歸函數來實現。下面是一個簡單的例子:
import java.util.ArrayList;
import java.util.List;
public class CartesianProduct {
public static List<List<Integer>> cartesianProduct(List<List<Integer>> lists) {
List<List<Integer>> result = new ArrayList<>();
cartesianProductHelper(lists, result, 0, new ArrayList<>());
return result;
}
private static void cartesianProductHelper(List<List<Integer>> lists, List<List<Integer>> result, int index, List<Integer> current) {
if (index == lists.size()) {
result.add(new ArrayList<>(current));
return;
}
for (int i = 0; i < lists.get(index).size(); i++) {
current.add(lists.get(index).get(i));
cartesianProductHelper(lists, result, index + 1, current);
current.remove(current.size() - 1);
}
}
public static void main(String[] args) {
List<List<Integer>> lists = new ArrayList<>();
lists.add(List.of(1, 2));
lists.add(List.of(3, 4));
lists.add(List.of(5, 6));
List<List<Integer>> result = cartesianProduct(lists);
for (List<Integer> tuple : result) {
System.out.println(tuple);
}
}
}
在上面的代碼中,cartesianProduct
函數接受一個包含多個列表的列表作為輸入,然后調用cartesianProductHelper
函數進行遞歸計算笛卡爾積。在cartesianProductHelper
函數中,我們首先檢查當前索引是否等于列表的大小,如果是則將當前結果添加到最終結果中。否則,我們遍歷當前列表中的元素,并遞歸調用cartesianProductHelper
函數來計算下一個列表的笛卡爾積。