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

Java 使用递归算法的前缀到中缀表示法,java,algorithm,recursion,Java,Algorithm,Recursion,我是新来的,不知怎的,我被困在这里了。 我创建了一个递归算法,它使用一个全局变量来记住他进行递归调用的位置,我正试图摆脱这个变量,因为对我来说,这似乎不是一个好的解决方案 有没有可能去掉这个全局变量?我无法调整方法头,因此方法的接口是固定的 在这里您可以看到我的代码: static int pos = -1; static boolean writeInfix(char[] expr) { boolean result; pos++; int printpos = pos

我是新来的,不知怎的,我被困在这里了。 我创建了一个递归算法,它使用一个全局变量来记住他进行递归调用的位置,我正试图摆脱这个变量,因为对我来说,这似乎不是一个好的解决方案

有没有可能去掉这个全局变量?我无法调整方法头,因此方法的接口是固定的

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

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;
    }
}
static int pos=-1;
静态布尔writeInfix(char[]expr){
布尔结果;
pos++;
int printpos=pos;
如果(expr[pos]='+'| | expr[pos]='-'| | expr[pos]='/'| | expr[pos]='*'){
系统输出打印(“”);
writeInfix(expr);
系统输出打印(expr[printpos]);
结果=writeInfix(expr);
系统输出打印(“)”;
返回结果;

}否则,如果(expr[pos]>='a'&&expr[pos],您可以添加一个新的辅助方法,在这里您可以控制它的变量,并让
writeInfix(char[]
)只是一个包装器,它除了调用“real”方法之外什么也不做

在这种新方法中,
pos
是一种补偿

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

您应该能够编写另一个将位置作为附加参数的方法:

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;
    }
}

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

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

无论何时返回false,返回-1。无论何时返回true,返回当前的
pos
值。

感谢您的帮助!:)
static boolean writeInfix(char[] expr, int pos);