30/09/2018, 17:03
[C++] Giúp sửa lỗi khi chạy đệ qui
Mình chạy chương trình như sau thì khi đến phần đệ qui thì nó bị lỗi. Không biết bị gì vì khi debug mới chạy vào là nó văng lỗi ra.
void Algorithm::Processing_QL(int i, vector<int> x, int n)
{
for (int j = 0; j <= 1; j++)
{
x[i] = j;
if (i == n)
{
KqTapHop.push_back(x);
break;
}
else
Processing_QL(i + 1, x, n);
}
}
void Algorithm::SinhDayNhiPhanDoDaiN_QL()
{
TaoDuLieuDauTien_QL();
vector<int> x = KqTapHop[0];
int n = DLDauVao.at(1);
Processing_QL(0, x, n);
}
Nó cứ bào vector out of range mà khi mình debug vào hàm Processing_QL(0, x, n); thì nó đã báo lỗi rồi. Tìm hoài ko ra, mong chỉ giáo!
Bài liên quan
Cho em thêm ít thông tin về vector KqTapHop với. Ban đầu nó được khai báo và khởi gán như thế nào?
Lỗi có thể do n được lấy từ dữ liệu đầu vào, nó lớn hơnsize của KqTapHop[0], nên việc truy cập phần tử vector x tại dòng x[i] = j là không đúng.
KqTapHop là cái ma trận lưu lại kết quả của mỗi tập hợp. Ví dụ: {0, 1, 2}, {0, 2, 1},…mỗi tập hợp được lưu vào trong KqTapHop.
À đúng thật là do n rồi, phaỉ là
if (i == n - 1)
mới đúng. Vậy mà nãy giờ cữ tưởng bị gì, mò hoài ko ra.Nếu chỉ mới khởi tạo vector KqTapHop như thế thôi thì size của nó đang là 0. Nghĩa là chưa có vector nào trong đó cả. nên việc truy cập đến KqTapHop[0] là sai.
Kiểm chứng tại đây: http://ideone.com/JJbkIJ
À không! Cái này là 2 hàm mình chạy thôi. Còn mấy cái kia thì mình có hết rồi. Bài này mình giải theo thuật toán quay lùi nên chỉ khác ở 2 hàm này thôi, còn mấy cái dữ liệu input này nọ thì mình chạy được ở cách giải khác rồi.