📅  最后修改于: 2023-12-03 14:58:26.360000             🧑  作者: Mango
本题考查了“递归”、“数学”、以及“计算时间复杂度”等知识点,是 GATE-CS 2004 考试中的经典问题之一。
给定一个整数 $n$, 请写一个递归函数来打印出$n$ 个二进制位的所有$0/1$排列。
例如,当 $n=2$ 时,该函数应该依次输出下列排列:
00 01 10 11
这是一个非常经典的递归问题,我们可以分别递归处理左子树和右子树来得到所有情况,前提是我们需要将当前结点的编号进行传递。
代码如下:
def print_binary_sequences(n):
helper(n, "")
def helper(n, prefix):
if n == 0:
print(prefix)
else:
helper(n - 1, prefix + "0")
helper(n - 1, prefix + "1")
# 测试
print_binary_sequences(2)
对于长度为 $n$ 的二进制序列,总的输出数量为 $2^n$ 个,因此时间复杂度为 $O(2^n)$。
本题是递归和数学知识的经典结合,需要掌握递归思想,懂得把问题分解成小问题,以及计算时间复杂度等技巧。