Chuỗi nhị phân¶
Yêu cầu¶
Sử dụng kỹ thuật quay lui, viết chương trình liệt kê tất cả số nhị phân có số chữ số cho trước.
Input¶
Số nguyên dương n, là số chữ số.
Output¶
Các số nhị phân có n chữ số.
Bộ test¶
| STT | Input | Output | 
|---|---|---|
| 1 | n = 3 | 000  001 010 011 100 101 110 111  | 
Cách giải đề xuất¶
- 
Khởi tạo
Đặt biến
binarykiểulist, mỗi phần tử là một chữ số0hoặc1, thể hiện một số nhị phân hợp lệ.Khởi tạo
binarylà danh sách rỗng. - 
Lựa chọn
Lần lượt chọn chữ số
0và chữ số1.Ứng với mỗi chữ số
0hoặc1, thực hiện:- Nạp chữ số này vào 
binarytại vị trí đang xét (do biếncurrentnắm giữ). - Gọi hàm đệ quy để tiếp tục nạp chữ số 
0hoặc1cho vị trí tiếp theo (current + 1). Chỗ này không cần kiểm tra hợp lệ. - Thực hiện quay lui: Xóa bỏ chữ số đã nạp ra khỏi 
binary, nhằm chuẩn bị nạp chữ số khác ở cùng vị trí. 
 - Nạp chữ số này vào 
 - 
Điều kiện dừng
Khi
binaryđã đủ số lượng chữ số theo yêu cầu, thì đây là một phương án hợp lệ, ta nạp vào mảngsolutions, là mảng chứa tất cả đáp án. 
Hình 1 dưới đây thể hiện một cách tương đối kỹ thuật quay lui khi chọn các chữ số 0 và 1 cho số nhị phân gồm 3 chữ số.
flowchart TD
    R[ø] --> 0[0] --> 00[0] --> 000[0]
    00 --> 001[1]
    0 --> 01[1] --> 010[0]
    01 --> 011[1]
    R[ø] --> 1[1] --> 10[0] --> 100[0]
    10 --> 101[1]
    1 --> 11[1] --> 110[0]
    11 --> 111[1]
Hình 1. Cây mô tả cách tạo số nhị phân gồm 3 chữ số
Như vậy, hàm phát sinh số nhị phân generate_binary được viết như sau:
Lưu ý: Do cách quản lý bộ nhớ của Python, trước khi nạp một đáp án vào mảng solutions, ta không nạp trực tiếp binary vào, mà phải nạp bản sao bằng cách dùng hàm copy().
Mã nguồn¶
- 
Chương trình C++ hoàn chỉnh đặt tại Gist của GitHub
 - 
Chương trình Python hoàn chỉnh đặt tại Google Colab