метод поиска в стеке с использованием рекурсии - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно искать элемент в стеке с помощью рекурсии. Я не могу использовать другие структуры данных. Я не могу изменить стек. Это то, что я сделал, и это неправильно

public static<E> boolean se(LinkedStack<E>s,E a) {
    boolean answer=false;
    E tmp=s.pop();
    if(tmp==a)
        answer= true;
    else {
        se(s, a);
        s.push(tmp);
    }
    return answer;
}

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020

Вот, попробуйте это. Он использует Java Stack, но процесс должен быть таким же.

    public static <E> boolean se(Stack<E> s, E a) {
        boolean answer;
        if (!s.isEmpty()) {
            // stack isn't empty so get value
            E k = s.pop();

            // meets criteria?
            if (k.equals(a)) {
                // yes so put it back on.
                s.push(k);
                // an return true
                return true;
              // doesn't meet criteria
            } else {
                // call again
                answer = se(s, a);
                // when the result is returned, the
                // values in the call chain will be
                // returned to the stack in the order they
                // were removed.
                s.push(k);

                //And the answer from each previous call will be
                // returned, resulting in the final answer.
                return answer;
            }
        }
        // stack empty with no success
        // return false
        return false;

    }
0 голосов
/ 01 апреля 2020

Вам нужно использовать (ie установить ответ) результаты рекурсивного вызова se.

public static<E> boolean se(LinkedStack<E>s,E a) {
    boolean answer=false;
    E tmp=s.pop();
    if(tmp.equals(a))
        answer= true;
    else {
        answer = se(s, a);
        s.push(tmp);
    }
    return answer;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...