猿问

为什么这段递归代码会无限重复?

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


编辑:完整代码。而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);

    }

}

它重复'count'大约是7或8,不知道为什么。


侃侃无极
浏览 132回答 2
2回答

慕哥6287543

尝试这个。每次运行后,取消注释其中一个递归调用。public class ForEverDemo {&nbsp; &nbsp;static long count = 0;&nbsp; &nbsp;public static void main(String[] args) {&nbsp; &nbsp; &nbsp; alongtime(0);&nbsp; &nbsp; &nbsp; System.out.println("count = " + count);&nbsp; &nbsp;}&nbsp; &nbsp;public static void alongtime(int v) {&nbsp; &nbsp; &nbsp; count++;&nbsp; &nbsp; &nbsp; if (v == 9) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return;&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; for (int i = 0; i < 3; i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;alongtime(v + 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// alongtime(v + 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// alongtime(v + 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// alongtime(v + 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// alongtime(v + 1);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;}}

米琪卡哇伊

终count有其价值9。通过打印这个值来检查这个。static void calc(int prev, int count) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("count=" + count + " prev=" + prev);&nbsp; &nbsp; &nbsp; &nbsp; if (count == 9) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ...你的递归中有很多分支,需要大量的计算。这就是为什么它没有结束。你可以再等一个小时或几天/几年才能看到这个程序的结束。或者用有效的代码替换此代码。
随时随地看视频慕课网APP

相关分类

Java
我要回答