生成所有長度為 n 的二進制數組,並展示了回溯法的基本概念。以下是詳細解釋:
程式碼逐步解釋
generate_binary(n, path)函式:def generate_binary(n, path): if n == 0: print(''.join(path)) return generate_binary(n - 1, path + ['0']) generate_binary(n - 1, path + ['1'])- 目標: 生成長度為
n的所有二進制數組。 - 遞迴終止條件: 當
n == 0時,表示已經生成了一個完整的二進制數組,把path中的內容印出來,並返回結束該遞迴分支。 - 遞迴:
- 使用
generate_binary(n - 1, path + ['0'])嘗試在當前組合加入'0',並遞迴生成下一層。 - 使用
generate_binary(n - 1, path + ['1'])嘗試在當前組合加入'1',並遞迴生成下一層。
- 使用
- 這兩個遞迴分支會生成所有可能的二進制組合。
- 目標: 生成長度為
主程式的
for迴圈:for i in range(1, 5): generate_binary(i, []) print()- 目標: 測試不同長度的二進制組合生成。
- 使用
for迴圈來調用generate_binary函式,當i = 1時生成長度為 1 的二進制組合,當i = 2時生成長度為 2 的二進制組合,依此類推直到i = 4。 - 每生成完一組長度的二進制組合後,印出一個空行來分隔不同組合的結果。
輸出結果解釋
當
n = 1:0 1- 生成了所有長度為 1 的二進制數組。
當
n = 2:00 01 10 11- 生成了所有長度為 2 的二進制數組。
當
n = 3:000 001 010 011 100 101 110 111- 生成了所有長度為 3 的二進制數組。
當
n = 4:0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111- 生成了所有長度為 4 的二進制數組。
程式運作流程:
- 每次遞迴都會將
n減 1,並且把當前的'0'或'1'加到path中。 - 當
n減到0時,就將目前累積的path印出來。 - 程式會自動回到上一層,繼續探索其他未嘗試的選擇,這就是回溯的概念。
總結
- 回溯法: 程式遞迴地嘗試加入
'0'和'1',當達到指定長度時印出結果,然後回到上一層繼續嘗試其他可能性。 - 用途: 這種方法非常適合生成所有排列組合或遍歷樹狀結構的問題。
沒有留言:
張貼留言