【问题标题】:Recursive method for parentheses balancing [python] [closed]括号平衡的递归方法[python] [关闭]
【发布时间】:2013-08-02 02:54:27
【问题描述】:

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

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

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

【问题讨论】:

  • 你想完成什么?
  • 我只是不明白如何解决这个问题。对于递归函数,必须有一个退出程序的条件。我不知道这个案子是什么。
  • 提示:当你找到一个开放的括号时,调用 find_match。当 find_match 找到一个开放的括号时,调用 find_match。当 find_match 找到一个接近的括号时,返回。如果 find_match 找到字符串的结尾,则有一个没有闭合括号的开放括号。如果顶部的 find_match 返回并且在字符串后面找到了一个闭合括号,则存在一个不匹配的闭合括号。
  • 我了解到您是该网站的新手,需要帮助完成作业。但是请先google问题,或者至少在写问题时注意旁边的建议帖子。 Your classmate (I think) has already asked a similar question 他/她得到了an answer he was happy with。 PS:你忘了说你的任务需要你在 python3 中做这个

标签: python function recursion


【解决方案1】:
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

【讨论】:

  • 这不使用递归?
  • 是的,提交太早了,用递归添加了我的第二个
  • 您的解决方案将在 ")(" 上返回误报
  • @inspectorG4dget my bad :( 这是正确的版本
【解决方案2】:

找到闭合括号的递归方法的工作方式是这样的

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

    return False       #base case

如果你看到一个打开的括号,你只需调用findClose(chars) 这不完整,这是一种可用于递归查找关闭括号的方法

【讨论】:

  • def checkpar(x): while len(x.split('()'))&gt;1: x=''.join(x.split('()')) if not x: return True return False
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2012-09-15
  • 2014-11-10
  • 2015-10-18
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多