Программа возвращает 0, но только «один вверх» в рекурсии, но я хочу, чтобы она пошла в «самый верх»? Это возможно? - PullRequest
0 голосов
/ 15 марта 2019

Я новичок в использовании рекурсии и пытаюсь заставить работать мою программу на палиндроме. Вот что я пытаюсь сделать: если символ не равен, я возвращаю 0. Если нет, я продолжаю повторяться, увеличивая i и уменьшая j. Если i больше не меньше j, я хочу сказать, что рекурсия выполнена, поэтому я хочу вернуться к тому, что слово является палиндромом (= 1).

Но когда я ввожу слово, которое не является палиндромом, я правильно возвращаю 0. (Я вижу это, когда отлаживаю). Но ... затем, в конце, он также возвращает 1. Я предполагаю, что это как-то связано с тем фактом, что рекурсия означает, что программа продолжает работать, а 0 возвращается к тому, что я ранее делал ранее. Но я хочу, чтобы 0 пошел на самый верх.

Есть ли способ обойти эту проблему? Или я что-то не так делаю? Извините, если это действительно просто. Заранее спасибо. Вот мой код:

public static int checkIfPalindrome(String s, int i, int j) {

    if (i<j) {

        if (s.charAt(i) == s.charAt(j)) {
            checkIfPalindrome(s, i+1, j-1);

        }
        else {
            return 0; 
        }
    }
    return 1;

}

1 Ответ

0 голосов
/ 15 марта 2019

Если вы знаете, что ваши указатели не сталкивались и символы, на которые они указывают, совпадают, то возвращаемое значение этого метода является возвращаемым значением рекурсивного вызова.Я исправил ваш код, чтобы сделать это ниже, но я также реорганизовал его по-другому, так как есть другие способы решения проблемы:

public static int checkIfPalindrome(String s, int i, int j) {

    if (i >= j) {
        return 1;
    }

    if (s.charAt(i) != s.charAt(j)) {
        return 0;
    }

    return checkIfPalindrome(s, i + 1, j - 1);
}
...