01/10/2018, 09:28

Code chạy tới độ dài 15 thì Ok nhưng với độ dài 20 thì bị lỗi

Chạy đến dòng 20 thì lại bị lỗi em không hiểu lắm …

public class lietke2xauNhiPHAN_khongco2sokhongdungcanhNhau {

static void TRY(int i, int a[], int b[]) {//khong hieu sao lai bi ntn???
if (Arrays.equals(a, b)) {
return;
} else {// 0 1 0 1 0 – 0 1 0 1 1 – 0 1 1 0 1 – 0 1 1 1 1 – 1 0 0 0
// 0 1 1 0 0
// – 1 0 1 0 1…
if (a[i] == 2) {
a[i] = 0;
a[i - 1] += 1;
if (a[i - 1] != 2) {
for (int t = i; t < a.length; t += 2) {
if (t < a.length - 1) {
if (a[t] == 0 && a[t] == a[t + 1]) { // xem 2 so
// khong
// co dung
// canh
// nhau
// khong
a[t + 1] = 1;
}
} else {
break;
}
}
}
if (a[i - 1] == 2) {
TRY(i - 1, a, b);
}else{
TRY(a.length - 1, a, b);
}
} else {
for(int k : a) System.out.print(k + " ");
System.out.println();
a[a.length - 1] += 1;
TRY(a.length - 1, a, b);
}
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
int a[], b[], x;

  x = new Scanner(System.in).nextInt();
  a = new int[x];
  b = new int[x];
  for (int i = 0; i < x; i++) {
  	if (i % 2 == 0)
  		a[i] = 0;
  	else
  		a[i] = 1;
  	b[i] = 1;
  }
  TRY(a.length - 1, a, b);
  for(int k : a) System.out.print(k + " ");

}
}

Mato Nguyen viết 11:30 ngày 01/10/2018

Mình chạy thử với độ dài 20 thấy bị lỗi: StackOverflowError
Cái này do chương trình thực hiện gọi đệ quy lưu trong Stack vượt quá kích thước của ngăn xếp nên bị tràn. Kích thước Stack trong cấu hình mặc định của JVM hình như là 512K hay 1M. Bạn có thể thay đổi tăng kích thước của ngăn xếp khi chạy chương trình, bổ sung thêm tham số -Xss khi chạy nhé:
-Xss[g|G|m|M|k|K]

Mình thử tăng kích thước Stack lên 8M thì chạy với độ dài 20 không thấy lỗi. Với độ dài 20 số lượng chuỗi in ra khá lớn, mình dùng eclipse trên console quan sát khó, output ra file lưu lại chắc xem đủ hơn.

Hoang viết 11:39 ngày 01/10/2018

cảm ơn a nha

Bài liên quan
0