Mỗi nghiệm chỉ tăng đếm một lần
Hai bản sinh dãy đặt count+=1 ngay trong nhánh k==n, sau khi in nghiệm. Không tăng biến đếm ở mọi lời gọi, vì các tiền tố chưa đủ độ dài chưa phải nghiệm.
Trước một lượt sinh mới cần count=0. Biến toàn cục giữ giá trị qua các lần gọi trong cùng chương trình; không đặt lại sẽ cộng lẫn nghiệm của lượt trước. Dòng “Tổng số nghiệm” được in sau lời gọi gốc, khi toàn bộ nhánh đã xét xong.
Với nhị phân dài n, số nghiệm là $2^n$. n=0 cho một nghiệm rỗng vì đã chọn đủ 0 vị trí ngay từ đầu; không phải 0 nghiệm.
Chuỗi kí tự cần nối các kí tự
Danh sách[0,1]và xâu"01"là hai kiểu biểu diễn khác nhau. Để in xâu, dùng bảng kí tự['0','1']và tại lá in ''.join(A). A lúc này chứa các kí tự, không phải số nguyên.
```python
A = ['0', '1']
print(''.join(A))
```
Kết quả in01, giữ cả số 0 đầu. Dùng trực tiếp join trên[0,1]không đúng vì các phần tử không phải xâu; cần tạo dãy kí tự hoặc chuyển từng phần tử sang str trước khi nối.
Kiểm số dòng nghiệm và dạng kết quả
Chạy nhi-phan2 để nhận 00,01,10,11 và dòng tổng số nghiệm4. Chế độ them-xoa2 in các danh sách số, còn nhi-phan2 in xâu kí tự.
Với nhi-phan0, có một dòng trống biểu diễn xâu rỗng và dòng tổng số nghiệm1. Với bản danh sách, nghiệm ấy hiện thành[]. Bản tải giới hạn tối đa4096 nghiệm để dễ chạy trên dữ liệu nhỏ; đây là giới hạn thực hành, không phải định nghĩa của quay lui.
Bài luyện
Vì sao count+=1 nằm ở cơ sở k==n?
Mỗi lá hợp lệ đóng góp đúng một nghiệm.
Tiền tố ngắn hơn n chưa hoàn thành yêu cầu.
Bài cần số nghiệm đã sinh.
Số nghiệm nhị phân là $2^n$, không phải luôn n.
Lời giải
Điều kiện k==n xác nhận đã chọn đủ các vị trí. Tăng một lần tại mỗi lần tới cơ sở sẽ đếm đúng từng nghiệm, không đếm các nút tiền tố.
Bài luyện
Với A=['0','1'], ''.join(A) cho gì?
Không đổi thứ tự kí tự khi nối.
Nối hai kí tự theo thứ tự hiện có.
Không có lệnh chuyển thành số nguyên.
join trả xâu, không trả danh sách.
Lời giải
Dấu nối rỗng ghép kí tự 0 rồi1 thành xâu01, giữ thứ tự và cả kí tự 0 đầu.
Bài luyện
Với n=0, sinh toàn bộ xâu nhị phân có bao nhiêu nghiệm?
Đây là các xâu dài1.
Xâu rỗng là biểu diễn không chứa kí tự.
Có đúng một cách chọn không có phần tử nào.
Cơ sở k==n đúng ngay và ghi nhận một nghiệm.
Lời giải
Ban đầu k=0 bằng n, hàm ghi nhận trạng thái rỗng ngay một lần. Công thức $2^0=1$cũng cho cùng số nghiệm.
Đang học