为了账号安全,请及时绑定邮箱和手机立即绑定

怎么解决这个Python递归啊,它用的根本就不是同一内存地址啊!

/ 猿问

怎么解决这个Python递归啊,它用的根本就不是同一内存地址啊!

AIxer 2017-08-07 10:16:15
'''
简单描述下原问题:将字符串内所有括号里的内容顺序倒置
举几个例子: 
        s = 'a(bc)d'
        Output should be : 'acbd'
        
        s = 'a(bc)(de)f'
        Output : 'a cb ed f'
        
        s = 'a(bc(de))f'
        Output : a decb f
‘’‘
# 问题是 当第一次使用该函数时,运行这条语句时
# for idx, each in enumerate(string): # Alas! 
# 这个 string 在递归返回时,最外层的 string 它仍旧不变,整个过程都是原始输入
# 因此它就继续循环,所以仍然可以找到 '(' 或 ')' 也因此得不到正确结果了
# 这也是和C语言不一样的地方

# 当然使用正则表达式也可以轻松解决,但这样就不可以么?我的水平还不够,希望大家能帮个忙, 谢谢!
# 我考虑过引入一个变量,但不好跟踪判断


# 代码如下:

def findrb(string): # 找右括号
    for idx, each in enumerate(string): # Alas! 
        if each == ')':
            string[:idx + 1] = string[:idx][::-1]
            break
        elif each == '(':
            string = string[:idx] + findrb(string[idx + 1:])

    return (string)

def Main():
    s = 'a(bc)d'
    nsl = list(s)

    print(''.join(findrb(nsl)))

if __name__ == "__main__":
    Main()


查看完整描述

2 回答

?
AIxer

呃,findrb() 这个函数不是严格的递归吧~, 好吧, 该问题已经解决,我发现了另一种递归方案

查看完整回答
反对 回复 2017-08-07
?
AIxer

呃, 如果每次递归返回时都顺带着返回一个 ' ) ' 的 idx 值, 然后再在上一层加上这个 idx 值以定位到 

' ) ' , 再用 del 语句把它删了,似乎也是可行的 ?

查看完整回答
反对 回复 2017-08-07

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信