我只是使用递归代码进行计算,但是它会陷入无限循环。
编辑:完整代码。 而且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,不知道为什么。
答案 0 :(得分:1)
最终count
的值为9
。通过打印此值进行检查。
static void calc(int prev, int count) {
System.out.println("count=" + count + " prev=" + prev);
if (count == 9) {
return;
}
...
您的递归中有很多分支,需要大量的计算。那就是为什么它没有结束。您可以再等一个小时或几天/年才能看到该程序的结束。或以高效的代码替换此代码。
答案 1 :(得分:0)
尝试一下。每次运行后,请取消注释其中一个递归调用。
public class ForEverDemo {
static long count = 0;
public static void main(String[] args) {
alongtime(0);
System.out.println("count = " + count);
}
public static void alongtime(int v) {
count++;
if (v == 9) {
return;
}
for (int i = 0; i < 3; i++) {
alongtime(v + 1);
// alongtime(v + 1);
// alongtime(v + 1);
// alongtime(v + 1);
// alongtime(v + 1);
}
}
}