括号的递归方法平衡[python]

时间:2013-08-02 02:54:28

标签: python function recursion

任何人都知道如何编写一个使用递归平衡括号的函数?

我在考虑计算每个外部或内部括号在字符串中弹出的次数,但是它会错过像这样的情况“()())()(”或者这个“)(”。

我的导师有递归的例子,解决了阶乘和计算的斐波那契数列的数量,但她从未真正解决其他类型的问题。

2 个答案:

答案 0 :(得分:3)

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 :(得分:0)

找到关闭parens的递归方法的工作方式是这样的

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

    return False       #base case

如果你看到一个打开的paren,你只需要调用findClose(chars)这不是完整的,这是一种可以用来递归找到关闭parens的方法