pythonのyieldって呼ばれるとメインに戻ってくるようなイメージがあったので再帰の終了条件でyieldがあると気持ち悪かったのだけど、呼び出し側に返されるらしい。
というわけで、やっと理解したので、再帰でyieldをガンガンつかう。
あと、状態の凍結と継続の違いがちょっとあやふやかも。
def permute(item):
if len(item) == 1: yield item
for i in range(len(item)):
for x in permute(item[:i]+item[i+1:]):
yield item[i] + x
c=0
for i in permute("0123456789"):
c += 1
if c == 1000000:
print i
break