z rekursji zawsze pomaga myśleć o tym jak o 2 części, a „Setup” i cyklicznej zabawy ction. Twoja konfiguracja stworzy odpowiednią sytuację (utwórz dwa stosy, przekaż je itd.), A następnie wywoła metodę rekursywną, a po wykonaniu metody rekurencyjnej zgłoś wyniki.
W twoim przypadku prawdopodobnie chcesz tego podpisu dla „rekurencyjnego” metoda:
public boolean compareStacks(Stack one, Stack two)
Jeśli ta metoda wyskakuje & porównuje górne elementy lawety stosu, może to return false prawo to (mówiąc don porównywać). Jeśli tak, masz teraz dwa stosy, każdy krótszy niż poprzednio. Już wiesz, jak porównać te dwa stosy, tak (właśnie napisałeś metodę, aby to zrobić!).
na końcu możesz "wepchnąć" swój jeden element z powrotem na każdy stos, aby przywrócić poprzedni stan przed powrotem.
Będzie trochę trudności w przywróceniu stosu w przypadku, gdy nie są one porównywane, i zapewnienie, że jeśli wywołanie funkcji compareStack nie powiedzie się, to poprawnie przekazuje to do poprzedniego stanu, nawet jeśli "obecny" compareStack się uda, ale to są szczegóły implementacji - pomyślałem, że wspomnę o nich, więc nie przeoczysz ich.
Istnieje urocze rozwiązanie z Try/finally (bez haczyków, powrót z próby i wepchnięcie z powrotem na stos w końcu), dzięki czemu kod byłby całkiem zgrabny, ale bez niego jest dość łatwy.
wierzę, że to działa. – user
piękne ... niesamowite ... poważnie jesteś mężczyzną. – user
@user: Zobacz moje ulepszenie - za pomocą try/finally unikniesz duplikatu kodu przywracającego stany. –