看板 Python 關於我們 聯絡資訊
現在遞迴跟非遞迴版的執行速度又拉近了,執行時間幾乎無差別: 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 ※ 引述《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