Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用堆栈将以下代码替换为非递归代码?_Java_Recursion_Tail Recursion_State Machine - Fatal编程技术网

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

谢谢你的帮助。

想想递归。当您递归地调用该方法时,实际上您调用了该方法,并将以前调用同一方法的状态存储在某处。您将此状态存储在哪里?答案是“在堆栈中”。但当您使用递归调用时,系统会为您管理堆栈

所以,你必须自己管理它。这意味着:。在第一次方法调用之前创建堆栈。更改方法的签名:它应该接受堆栈作为参数。堆栈应该包含您的状态。不检查代码,它可以是基本对象,也可以是复杂对象。若您需要复杂的对象来创建自己的类状态,那个么它将保存所有需要的信息


我希望这足够了。祝你好运

这真的不是一个“为我写代码”的网站。我很抱歉,这对我来说是一个非常困难的问题,我不是在等待一个完整的解决方案,只是一个想法。