Czy istnieje sposób na łatwe i szybkie wyjście z rekursji w Javie? Istnieje sposób na wyrwanie się z for loop
za pomocą instrukcji break;
. Czy istnieje równoważny wzorzec lub metoda unikania rekursji?Najszybsza ucieczka od rekursji w Javie
Mogę myśleć o stworzeniu osobnego wątku, a po obliczeniu wartości, po prostu zabijanie wątku zamiast bulgotania stosu rekursji. Czy istnieje lepszy sposób?
Istnieje już pytanie, które omawia, w jaki sposób można wykluczyć rekurencję: here.
To, czego szukam, to szybsza metoda osiągnięcia tego celu, prawdopodobnie bez przechodzenia przez stos. Coś takiego jak instrukcja goto
lub instrukcja .
kryteriami branymi pod uwagę są tu:
- Łatwość refaktoringu używać tej ucieczki
- Smoły wydajność (im szybciej tym lepiej)
- Długość w praktyce (szybciej pisać/add tym lepiej)
Odpowiedź, której szukam, wyjaśni zarówno wydajność, jak i prostotę rozwiązania - jest to zadawane w kontekście konkurencji algorytmicznej, więc rozwiązanie Wymagane są ns, które wymagają mniejszej liczby refaktoryzacji.
Dlaczego miałbym go używać?
Czasami podczas kodowania niektórych konkurencji algorytmicznej, musisz zwrócić wartość z wewnątrz rekursji i zastanawiam się, czy możesz to zrobić szybciej, używając tego rodzaju przerwy. Pomyśl o algorytm, który wygląda następująco:
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;
}
Jest ładny dyskusja tutaj: http://stackoverflow.com/questions/856124/breaking-out-of- a-recursion-in-java –
'System.exit (0);' –
'throw new ResultFoundException (...);' chociaż dla downvotes nie będę ryzykować tego jako odpowiedź. :) –