Есть ли способ для быстрого и быстрого выхода из рекурсии на Java? Существует способ выйти из for loop
с помощью оператора break;
. Есть ли эквивалентный шаблон или метод выхода из рекурсии?
Я могу думать о том, чтобы создать отдельный поток, и как только значение вычисляется, просто убивая поток, а не пузырясь в стеке рекурсии. Есть ли лучший способ?
Уже есть вопрос, который обсуждает, как вы можете вырваться из рекурсии: здесь.
То, что я ищу, это более быстрый способ его достижения, возможно, не возвращаясь через стек. Что-то вроде инструкции goto
или break
.
Критериями, рассмотренными здесь, являются:
- Легкость рефакторинга для использования этого escape-кода
- Сырая производительность (чем быстрее, тем лучше)
- Длина на практике (чем быстрее написать/добавить лучшее)
Ответ, который я ищу, объяснит как производительность, так и простоту решения - это задается в контексте алгоритмического соревнования, поэтому предпочтительны решения, требующие меньше рефакторинга.
Почему я хочу использовать его?
Иногда при кодировании какого-либо алгоритмического соревнования вам нужно вернуть значение из рекурсии, и мне интересно, можете ли вы сделать это быстрее, используя этот вид перерыва. Подумайте об алгоритме, который выглядит так:
public static MyClass myFunct(MyClass c, int x){
myFunct(c, c.valueA);
myFunct(c, c.valueB);
//do some work - that modifies class c
if(c.valueE == 7){
//finished work, can return without unwinding the whole recursion
//No more modifications to class c
}
myFunct(c, c.valueC);
myFunct(c, c.valueD);
return c;
}