簡體   English   中英

為什么遞歸時會出現這個超時錯誤? (Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM