Проверьте палиндром с помощью рекурсии - PullRequest
2 голосов
/ 26 октября 2011

Я пытаюсь реализовать функцию, которая будет проверять, является ли слово палиндромом. Ниже приведен код, который я пытался использовать. Код, очевидно, работает для однобуквенных слов и слов, которые не начинаются и не заканчиваются одной и той же буквой. Это терпит неудачу ни на чем другом. Пожалуйста, помогите

bool is_palindrome(int start, int end, const string & str)
{
    if (str[start] != str[end])
        return false;
    else if (start == end)
        return true;
    else
        return is_palindrome(start++, end--, str);

    return false;
}

вот основная функция, которую вызывает эта функция http://csel.cs.colorado.edu/%7Eekwhite/CSCI2270Fall2011/recursion_lab/palindrome.cxx

Ответы [ 5 ]

7 голосов
/ 26 октября 2011

start++ увеличивает значение переменной [local] start и возвращает значение old . Вы хотите вычислить новое значение, и вам вообще не нужно изменять локальную переменную.

Поэтому напишите start+1, end-1 вместо этого, а затем рассмотрите случай, когда ваша строка имеет четное количество символов, потому что там есть другая проблема.

2 голосов
/ 26 октября 2011

Пара вещей:

Вам не нужно использовать префиксные операторы увеличения / уменьшения?

return is_palindrome(++start,--end, str);

Кроме того, вам нужно сделать начало теста> = концом, чтобы он работал с четным числом символов.

0 голосов
/ 14 августа 2017

рекурсивно вызывает функцию палиндрома, чтобы проверить, является ли строка палиндромом или нет. bool is_palindrome (int start, int end, const string & str) переменные начала и конца используются для управления процессом сопоставления для палиндрома. после каждого совпадения дается следующая итерация в формате рекурсии

0 голосов
/ 14 августа 2017

Попробуйте, не уверен, что это 100% работает, но у меня это работает:

bool is_palindrome(int start, int end, const string& str)
{
    if (str[start] != str[end])
      return false;
    else if (str[start] == str[end])
      {
        if (start <= end)
        return is_palindrome(start+1, end-1, str);
        return true;
      }

}
0 голосов
/ 04 июля 2015

Это должно быть что-то вроде:

bool is_palindrome(int start, int end, const string& str)
{
        if (str[start] != str[end])
          return false;
        else if ((start == end) || (start < end))
          return true;
        else
          return is_palindrome(++start, --end, str);

        return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...