Я пытаюсь получить число (n) до (m), и для меня алгоритм имеет смысл, но он всегда сбой с ошибкой Stackoverflow. любая помощь? вот мой код:Ошибка StackOverflow при использовании recursion
private static int solve(int n, int m, int steps) {
if (n > m || n <= 0) {
//--steps;
return 0;
} else if (n == m)
return steps;
return Math.min(solve(n * 2, m, steps++), solve(n - 1, m, steps++));
}
Update ::: этот код решить эту проблему очень элегантно
private static int solve(int n, int m) {
int steps = 0;
int cur = n;
ArrayList<Integer> arr = new ArrayList<>();
//Setting a list of the best minimum track.
arr.add(m);
for (int i = 0; !arr.contains(1); ++i)
arr.add((int) Math.round((double) arr.get(i)/2));
//Aligning the number n to the track and applying it to the best track.(Imagine a stair of steps and you have to reach the top of it, you'll align yourself to one of the steps and then voooom :))
while (cur != m) {
if (arr.contains(cur))
cur *= 2;
else
cur--;
steps++;
}
return steps;
}
Ну, с каких значений вы начинаете? Какие шаги диагностики вы предприняли, чтобы проверить, что происходит? Вы пробовали отлаживать код? –
Один подсказку: вызов 'solve (2, 3)' требует вызова 'solve (1, 3)' ... который, в свою очередь, вызывает вызов 'solve (2, 3)' ... как вы ожидаете, что это будет разрешено? (Не понятно, что вы пытаетесь вычислить, если честно ...) –
Я возьму «бесконечную рекурсию» за 200, Алекс. –