[英]Why does this timeout error occur in recursion? (Python)
我的任務是找到給定字符串的所有排列(例如,for string = 'aab' return ['aab','aba','baa']),我知道需要遞歸來解決這個問題。 我仍然很難圍繞遞歸進行思考,所以當我運行它時,我收到一個超時錯誤。 誰能告訴我到底是什么原因造成的? 盯着它看了一會兒。 謝謝!
import numpy as np
per = []
def permutations(string):
#permute
if len(string) == 1:
return string
global per
strList = list(string)
lastElem = len(strList)-1
for i in range(lastElem+1):
if i==lastElem:
return string
else:
strList[i], strList[i+1] = strList[i+1], strList[i]
permutations(str(strList[i+1:]))
strList[i], strList[i+1] = strList[i+1], strList[i]
per.append(str(strList))
##REMOVE DUPLICATES##
np.array(per)
return np.unique(per)
問題是您在對函數的遞歸調用中傳遞了列表的字符串表示形式,而不是連接每個列表元素。 例如,當strList = ['a', 'a', 'b']
, str(strList)
將返回"['a', 'a', 'b']"
。 相反,您應該使用''.join(strList)
來實際獲取"aab"
。
這個問題不需要使用遞歸,實際上用itertools.permutations一行就可以得到結果。
>>> set(''.join(x) for x in itertools.permutations('aab'))
{'aab', 'aba', 'baa'}
但是如果你想實現一個遞歸版本,你還需要為你到達的字符串的當前索引傳遞一個參數。 對於這個確切的問題,網上有很多例子,它只需要快速谷歌搜索,甚至可能在 SO 上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.