用递归解决全括号表达式 [英] solving fully parenthesized expressions with recursion

查看:33
本文介绍了用递归解决全括号表达式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在想出一种递归方法时遇到了麻烦,该方法可以解决完全括号内的方程..例如 ((3+2)/(1+4)).我能够想出一个递归解决方案来使用递归解决像 +*+3421 这样的中缀表达式,但是对于像 ((3+2)/(1+4)) 我有点卡住了.

I am having trouble coming up with a recursive method that can solve fully parenthesized equations..such as ((3+2)/(1+4)). I was able to come up with a recursive solution for solving infix expressions like +*+3421 using recursion, but for something like ((3+2)/(1+4)) I am a little stuck.

def evalPrefix(exp):
    it = iter(exp)
    return evalPrefixInner(it)

def evalPrefixInner(it):
    item = it.next()
    if isInt(item):
        return int(item)
    else: 
        operand1 = evalPrefixInner(it)
        operand2 = evalPrefixInner(it)
        return execute(item, operand1, operand2)

推荐答案

你的语法是:

expr ::= int | ( expr op expr )

正确吗?

因此,忽略错误检查,例如...

So, ignoring error checking, something like...

def evalExpr(it):
    item = it.next()
    if isInt(item):
        return int(item)
    else: 
        //item should = lparen
        operand1 = evalExpr(it)
        op = it.next()        
        operand2 = evalExpr(it)
        rparen = it.next() 
        return execute(op, operand1, operand2)

这篇关于用递归解决全括号表达式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆