Cách thay thế duy nhất để sử dụng vòng lặp là sử dụng đệ quy.
Bạn có thể xác định một phương pháp như
public static int sum(List<Integer> ints) {
return ints.isEmpty() ? 0 : ints.get(0) + ints.subList(1, ints.length());
}
Điều này rất kém hiệu quả so với việc sử dụng một vòng lặp đơn giản và có thể bị nổ nếu bạn có nhiều phần tử trong danh sách.
Một giải pháp thay thế tránh tràn ngăn xếp là sử dụng.
public static int sum(List<Integer> ints) {
int len = ints.size();
if (len == 0) return 0;
if (len == 1) return ints.get(0);
return sum(ints.subList(0, len/2)) + sum(ints.subList(len/2, len));
}
Điều này cũng không hiệu quả, nhưng sẽ tránh được tràn ngăn xếp.
Cách ngắn nhất để viết những điều tương tự là
int sum = 0, a[] = {2, 4, 6, 8};
for(int i: a) {
sum += i;
}
System.out.println("sum(a) = " + sum);
bản in
sum(a) = 20
ArrayListkhông chứa một cái gì đó là "có thể tổng hợp"? ArrayList và một mảng không nhất thiết phải giống nhau. Đối với tính tổng các số trong một mảng, đó là một vòng lặp for rất đơn giản qua các phần tử và tính tổng tích lũy.