Здесь - это учебник, описывающий именно то, что вы хотите, включая код. Вы правы в том, что сложность O (2 ^ n).