เมื่อต้องการสร้างรหัสเกรย์แบบเรียกซ้ำ สามารถสร้างรายการว่าง เริ่มจาก ['0', '1'] แล้วขยายทีละขั้นโดยการคัดลอกย้อนกลับและเติมคำนำหน้า 0 และ 1
ตัวอย่างโค้ด
def generate_gray_list(n):
if n <= 0:
return
gray_list = ["0", "1"]
i = 2
while i < (1 << n):
for j in range(i - 1, -1, -1):
gray_list.append(gray_list[j])
for j in range(i):
gray_list[j] = "0" + gray_list[j]
for j in range(i, 2 * i):
gray_list[j] = "1" + gray_list[j]
i <<= 1
for code in gray_list:
print(code)
num = 3
print("The number is:", num)
print("Generating Gray codes...")
generate_gray_list(num)ผลลัพธ์
The number is: 3 Generating Gray codes... 000 001 011 010 110 111 101 100
คำอธิบาย
เริ่มต้นรายการด้วยรหัสเกรย์ 1 บิต: ['0', '1']
ในแต่ละรอบ: คัดลอกรายการย้อนกลับ แล้วเติม '0' หน้าครึ่งแรก และ '1' หน้าครึ่งหลัง
ใช้บิตเชฟต์ซ้าย (
<<) เพื่อเพิ่มจำนวนบิตทีละขั้นทำซ้ำจนได้ 2^n รหัสสำหรับ n บิต