※ 引述《ykjiang (York)》之銘言:
: 好玩的是,非遞迴版調換迴圈順序後也變快幾近一倍:
: def gen1_2(n):
: L = ['']
: for i in xrange(n):
: L = [j+k for j in 'ATCG' for k in L]
: return L
: 所以現在非遞迴版比遞迴版快一倍 :)
: ※ 引述《ykjiang (York)》之銘言:
: : 其實遞迴版並不會比較慢,只要稍做調整:
: : def gen(n):
: : if n == 0:
: : return ['']
: : else:
: : return [x+y for x in gen(n-1) for y in 'ATCG']
: : 改變迴圈的順序,這是很基本的最佳化作法...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.10.102
現在遞迴跟非遞迴版的執行速度又拉近了,執行時間幾乎無差別:
def gen0_2(n):
I = list('ATCG')
if n == 0:
return ['']
else:
return [x+y for x in gen0_2(n-1) for y in I]
def gen1_3(n):
L = ['']
I = list('ATCG')
for i in xrange(n):
L = [j+k for j in L for k in I]
return L