使用递归算法的中缀到中缀表示法

时间:2017-05-26 09:13:47

标签: java algorithm recursion

我是新来的,我不知何故被卡住了。 我创建了一个递归算法,使用全局变量来记住他做出递归调用的位置,我试图摆脱这个变量,对我来说似乎不是一个好的解决方案。

有没有机会摆脱这个全局变量?我无法调整方法头,因此方法的界面是固定的。

在这里你可以看到我的代码:

static int pos = -1;
static boolean writeInfix(char[] expr) {
    boolean result;
    pos++;
    int printpos = pos;
    if(expr[pos]=='+'||expr[pos]=='-'||expr[pos]=='/'||expr[pos]=='*'){
        System.out.print("(");
        writeInfix(expr);
        System.out.print(expr[printpos]);
        result = writeInfix(expr);
        System.out.print(")");
        return result;
    }else if(expr[pos] >= 'a' && expr[pos] <= 'z'){
        System.out.print(expr[pos]);
        return true;
    }else{
        return false;
    }
}

感谢您的帮助:)

3 个答案:

答案 0 :(得分:2)

您可以添加一个新的辅助方法,在其中控制其变量,让writeInfix(char[])只是一个包装器,除了调用“真实”方法之外什么都不做。

在这种新方法中,pos是一个文件。

  • 这也可以确保您可以两次(独立)调用您的API方法(writeInfix),而不必担心副作用(第一次调用后pos初始化为错误值。)

答案 1 :(得分:0)

您应该能够使用该位置作为附加参数编写另一种方法:

private static boolean writeInfix(char[] expr, int pos) {
    boolean result;
    int printpos = pos;
    if(expr[pos]=='+'||expr[pos]=='-'||expr[pos]=='/'||expr[pos]=='*'){
        System.out.print("(");
        writeInfix(expr);
        System.out.print(expr[printpos]);
        result = writeInfix(expr, pos + 1);
        System.out.print(")");
        return result;
    }else if(expr[pos] >= 'a' && expr[pos] <= 'z'){
        System.out.print(expr[pos]);
        return true;
    }else{
        return false;
    }
}

在你已有的方法中,你只需要打电话

static boolean writeInfix(char[] expr) {
    return writeInfix(expr, -1);
}

答案 2 :(得分:0)

您可以将pos作为参数添加到writeInfix函数。

static boolean writeInfix(char[] expr, int pos);

如果您返回false,请返回-1。无论您返回true,都要返回当前的pos值。