这是一台有限状态机:
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;
}
}
感谢您的帮助。
答案 0 :(得分:1)
考虑递归。当您以递归方式调用方法时,实际上调用方法并将某个方法的先前调用的状态存储在某处。你在哪里存放这个州?答案是“堆叠”。但是当您使用递归调用时,系统会为您管理堆栈。
所以,你必须自己管理它。这意味着以下内容。在第一次方法调用之前创建堆栈。更改方法的签名:它应该接受堆栈作为参数。堆栈应包含您的状态。在不检查代码的情况下,它可以是原始对象或复杂对象。如果您需要复杂的对象创建自己的类State,那将包含所有需要的信息。
我希望这就够了。祝你好运!