01/10/2018, 17:44
Tại sao gọi BackTracking(i+1) vs BackTracking(++i) lại cho kết quả khác nhau?
Trong thuật toán quay lui BackTracking để liệt kê, ++i và i+1 đều có ý nghĩa quay lui đến phần tử cần cấu hình tiếp theo. Nhưng tại sao kết quả lại khác nhau? Ai đã từng gặp vấn đề này chưa ạ? Mình nghĩ mãi chưa hiểu vì sao
Bài liên quan
Caller thực hiện ở mức i => callee thực hiện mức i+1, vậy ++i là không đúng về mặt khái niệm, và ++ vào thì cũng phải
--
thôi.(i + 1) không làm thay đổi giá trị của i. Còn (++i) thì có.
Vấn đề mà bạn gặp phải là hãy đặt một câu hỏi thông minh hơn. Kết quả là gì, khác nhau ra sao, triển khai như thế nào?..
Vậy tại sao khi quay lui để liệt kê dãy nhị phân độ dài n phải kiểm tra điều kiện nếu i ==n hay chưa? Tức là giá trị của i đã thay đổi rồi đúng không bạn? Trong trường hợp dưới đây thì liệt kê ra đầy đủ các cấu hình, tuy nhiên thay i+1 bới ++i thì lại thiếu cấu hình,
Thay đổi biến chạy của vòng lặp không phải là chuyện đùa, nhất là thay đổi ngay trong thân vòng lặp
for
.Đấy, khác đấy!
Giữa
i+1
(i
không đổi) và++i
(i
thay đổi) trong vòng lặp.Đối với
++i
thì lặp lần đầu thì chưa có gì, lặp lần sau thì giá trịi
tăng 1 (nếui != n
,else
được chạy)