Вы на самом деле не знаете, действительно ли Ваш правильно написанный код C быстр, если Вы не посмотрели на дизассемблирование того, что производит компилятор. Много раз Вы смотрите на него и видите, что "правильно написанный" было субъективно.
, Таким образом, не необходимо записать в ассемблере для получения самого быстрого кода когда-либо, но, конечно, стоит для знания ассемблера по той же самой причине.
Нет необходимости быть слишком умным для чего-то такого простого:
def perms(n):
if not n:
return
for i in xrange(2**n):
s = bin(i)[2:]
s = "0" * (n-len(s)) + s
yield s
print list(perms(5))
Python 2.6 +:
['{0:0{width}b}'.format(v, width=x) for v in xrange(2**x)]