📜  门| GATE-CS-2004 |问题24(1)

📅  最后修改于: 2023-12-03 14:58:26.360000             🧑  作者: Mango

门 | GATE-CS-2004 | 问题 24

本题考查了“递归”、“数学”、以及“计算时间复杂度”等知识点,是 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)$。

总结

本题是递归和数学知识的经典结合,需要掌握递归思想,懂得把问题分解成小问题,以及计算时间复杂度等技巧。