2013-08-02 99 views
-4

任何人都有任何想法如何編寫一個函數來平衡括號使用遞歸? ()()()(「or this」)(「。括號平衡的遞歸方法[python]

」)(012)

我的教練有這樣的解決階乘和斐波那契序列的計算數字遞歸的例子,但她從來沒有真正去了解決其他類型的問題。

+0

你想完成什麼? –

+0

我只是不明白如何解決這個問題。對於遞歸函數,必須有退出程序的條件。我不知道這是什麼情況。 – jonyc

+0

我只是沒有完全明白你的問題?我看到你的輸入,什麼是期望的輸出? –

回答

2
def balanced(s, i=0, cnt=0): 
    if i == len(s): return cnt == 0 
    if cnt < 0: return False 
    if s[i] == "(": return balanced(s, i + 1, cnt + 1) 
    elif s[i] == ")": return balanced(s, i + 1, cnt - 1) 
    return balanced(s, i + 1, cnt) 

for s in ["()", "(()", "(())", "()()", ")("]: 
    print "{}: {}".format(s, balanced(s)) 

(): True 
((): False 
(()): True 
()(): True 
)(: False 
+1

這不使用遞歸嗎? – seth

+0

是的,在提交時太早提交,添加我的第二個遞歸 –

+0

您的解決方案將返回一個'') 「' – inspectorG4dget

0

的方式遞歸的方法來找到關閉括號會的工作是一樣的東西這

def findClose(chars): 
    while len(chars) != 0: 
     if chars[0] == ")": 
      return True 
     elif chars[0] == "(": 
      findClose(chars[1:]) 

    return False  #base case 

你隨後將只需調用findClose(chars),如果你看到一個開放的括號這是不完整的,這是一個方法,你可以用它來找到遞歸閉的括號

+0

'def checkpar(x): while len(x.split('()'))> 1:x =''。join(x.split('() ')) 如果不是x:return True return False' –