java - 为什么这个递归代码会无限重复?

标签 java recursion

我只是用递归代码进行计算,但它进入了无限循环。

编辑:完整代码。 而IDE(Eclipse)则没什么可说的,并且可以很好地运行。

class RepresentWithN {
    static int number;
    static int N;
    static int answer;

public int solution(int N, int number) {
    RepresentWithN.N = N;
    RepresentWithN.number = number;
    answer = 9;

    calc(0, 0);
    return answer == 9 ? -1 : answer;
}

static int conN(int length) {
    int tmp = N;
    for (int i = 1; i < length; i++) {
        tmp += tmp * 10;
    }
    return tmp;
}

static void calc(int prev, int count) {
    if (count == 9) {
        return;
    }

    if (prev == number) {
        answer = Math.min(answer, count);
        return;
    }
    System.out.println("count=" + count + " prev=" + prev);
    for (int i = 1; i <= 5; i++) {
        calc(prev + conN(i), count + 1);
        calc(prev - conN(i), count + 1);
        calc(prev * conN(i), count + 1);
        calc(prev / conN(i), count + 1);
    }
}

它重复的“计数”大约是 7 或 8,但不知道为什么。

最佳答案

最终count的值为9。通过打印这个值来检查这一点。

static void calc(int prev, int count) {
        System.out.println("count=" + count + " prev=" + prev);
        if (count == 9) {
            return;
        }
        ...

你的递归中有很多分支,需要大量的计算。这就是为什么它没有结束。您可以再等一个小时或几天/几年才能看到该计划的结束。或者用高效的代码替换此代码。

关于java - 为什么这个递归代码会无限重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944580/

相关文章:

recursion - 成员?在无限列表上运行

java - 将 While 循环合并到程序中

Java静态/非静态方法

java - SVN提交日志问题

python - Scrapy - 递归抓取到第三页

javascript - 使用 AJAX 递归调用服务器在 Internet Explorer 中不起作用

python - 聪明的基于流的 python 程序不会遇到无限递归

java - N 皇后区 - java

java - JScrollPane 不会在 JPanel 上滚动

java - Tomcat 线程模型 - 每个请求模型中的线程是否处理与该请求相关的所有工作?