btvn.vn
Tìm kiếm Đăng nhập

Sinh dãy bằng append và pop

Lưu trên thiết bị này
Chuyên đề lựa chọn CS: Kĩ thuật duyệt · Chọn bài khác

Mỗi lần đi tiếp có một lần khôi phục

```python def genBinary_growing(A, k, n): global count if k == n: print(A) count += 1 else: for value in range(2): A.append(value) genBinary_growing(A, k + 1, n) A.pop() ``` Bắt đầu với count=0 và genBinary_growing([],0,n). Ở đầu lời gọi, len(A)==k. append thêm lựa chọn nên dãy dài k+1; đệ quy tìm các cách hoàn thành phần còn lại. Khi lời gọi ấy kết thúc, pop bỏ phần tử vừa thêm, khôi phục tiền tố cũ để thử giá trị kế tiếp. Cơ sở k==n in dãy đủ độ dài rồi tăng count. Sau khi duyệt xong toàn bộ cây, danh sách ban đầu trở lại rỗng.

Theo dõi một lần trở về

Với n=2, đi từ[]đến[0], rồi[0,0]và ghi nghiệm. Sau khi lời gọi ở k=2 kết thúc, pop bỏ0 cuối để A trở lại[0]. Vòng thử tại k=1 chọn 1, tạo[0,1]và ghi nghiệm tiếp. Kết thúc cả hai lựa chọn ở vị trí thứ hai, trở về mức k=0; pop của mức này bỏ0 đầu để A=[]rồi mới thử 1 ở vị trí đầu. Mỗi mức chỉ xóa phần tử do chính nó thêm.

Đối chiếu hai bản trên cùng n

Chạy co-dinh2 và them-xoa2. Hai bản cần in cùng bốn dãy theo cùng thứ tự và cùng tổng số nghiệm4. Không chuyển nguyên poptừ bản thêm dần sang bản tạo sẵn: cách giữ trạng thái khác nhau. Nếu quên pop ở bản thêm dần, A vẫn giữ dữ liệu nhánh trước và không còn len(A)==k; kết quả có thể dài sai và mang thêm phần tử cũ.

Bài luyện

Sau khi ghi[0,0], pop ở mức chọn vị trí thứ hai cần đưa A về đâu?
Chọn một đáp án

Bài luyện

Nếu pop trước khi gọi đệ quy thì điều gì sai?
Chọn một đáp án

Bài luyện

Đầu lời gọi đúng ở bản thêm dần có quan hệ nào?
Chọn một đáp án

Bài luyện

Vì sao mỗi mức chỉ pop phần tử chính nó thêm?
Chọn một đáp án

Đang học