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