Java 如何使用堆栈将以下代码替换为非递归代码?
这是一个有限状态机:Java 如何使用堆栈将以下代码替换为非递归代码?,java,recursion,tail-recursion,state-machine,Java,Recursion,Tail Recursion,State Machine,这是一个有限状态机: private int recursive(int rc, int pc, int sc) { for (;;) { Instruction actual = program[rc][pc]; switch (actual.type) { case FIRST: if (sc >= input.length || input[sc] != actual.c1) return
private int recursive(int rc, int pc, int sc) {
for (;;) {
Instruction actual = program[rc][pc];
switch (actual.type) {
case FIRST:
if (sc >= input.length || input[sc] != actual.c1) return -1;
pc++; sc++;
continue;
case SECOND:
pc = actual.n1;
continue;
case THIRD:
int result = recursive(rc, actual.n1, sc);
if (result != -1) return result;
pc = actual.n2;
continue;
case FOURTH:
result = recursive(actual.n1, 0, sc);
if (result == -1) return -1;
pc++; sc = result;
continue;
case FIFTH:
if (sc == input.length) return sc;
return -1;
}
return -1;
}
}
谢谢你的帮助。想想递归。当您递归地调用该方法时,实际上您调用了该方法,并将以前调用同一方法的状态存储在某处。您将此状态存储在哪里?答案是“在堆栈中”。但当您使用递归调用时,系统会为您管理堆栈 所以,你必须自己管理它。这意味着:。在第一次方法调用之前创建堆栈。更改方法的签名:它应该接受堆栈作为参数。堆栈应该包含您的状态。不检查代码,它可以是基本对象,也可以是复杂对象。若您需要复杂的对象来创建自己的类状态,那个么它将保存所有需要的信息
我希望这足够了。祝你好运 这真的不是一个“为我写代码”的网站。我很抱歉,这对我来说是一个非常困难的问题,我不是在等待一个完整的解决方案,只是一个想法。