Вызов палиндрома myProgrammingLab и рекурсия

Я прохожу курс «Введение в программирование», и большая часть материала вбивается в наши головы через myProgrammingLab. У меня небольшие проблемы с концепцией рекурсии... Это как бы попало для меня. Эта конкретная проблема поставила меня в тупик. Когда я отправляю свой код, он предлагает мне

CTest1.cpp: In function 'bool isPalindrome(int*, int)':
CTest1.cpp:9: error: invalid conversion from 'int' to 'int*'
CTest1.cpp:9: error:   initializing argument 1 of 'bool isPalindrome(int*, int)'"

в качестве совета, который, уверяю вас, не очень полезен. Ржу не могу

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

«Палиндром массива» — это массив, который при перестановке элементов остается неизменным (т. е. элементы массива одинаковы при просмотре вперед или назад).

Напишите рекурсивную функцию с логическим значением isPalindrome, которая принимает массив с целочисленным значением и количество элементов и возвращает, является ли массив палиндромом.

Массив является палиндромом, если: массив пуст (0 элементов) или содержит только один элемент (который, следовательно, совпадает при перестановке), или первый и последний элементы массива совпадают, а остальная часть массива ( т. е. элементы со второго по предпоследний) образуют палиндром.

Мой код до сих пор:

bool isPalindrome(int arr[], int n){
    if (n == 0 || n == 1)
    {
        return true;
    }
    else if (arr[n-1] == isPalindrome(arr[((n-1) - n) +1 ], n))
    {
        return true;
    } 
    else {
        return false;
    }
}

ИЗМЕНИТЬ:

Теперь я изменил свою проблемную строку на

else if (arr[n-1] == isPalindrome(arr[], n-1))

Теперь я понимаю подсказку: «Мы думаем, что вы, возможно, захотите использовать +». Я не вижу, где здесь применимо добавление. Я не думаю, что речь идет об увеличении, потому что оно указывает на увеличение как «++», как в коде.

Мне также дается сообщение об ошибке:

CTest1.cpp: в функции 'bool isPalindrome(int*, int)': CTest1.cpp:9: ошибка: ожидаемое первичное выражение перед токеном ']'

Вторая строка выдает ошибку, потому что скобки пусты в моем первом аргументе?


person BDevin    schedule 13.11.2014    source источник
comment
Как вы думаете, что такое arr[((n - 1) - n) + 1], если вам требуется int arr[]?   -  person Benjamin Bannier    schedule 13.11.2014
comment
Вы передаете элемент массива, когда аргументу требуется весь массив.   -  person stark    schedule 13.11.2014


Ответы (2)


Когда вы рекурсивно вызываете isPalindrome, вы передаете эти два аргумента

isPalindrome(arr[((n-1) - n) +1], n)

Со вторым все в порядке, но первый аргумент оценивается как

arr[index]

Который просто индексирует значение из вашего массива и будет оцениваться как int. Поскольку он ищет int* или, другими словами, адрес элемента, с которого нужно начать, вы можете передать

&arr[((n-1) - n) +1]
person Cory Kramer    schedule 13.11.2014

Совет компилятора на самом деле очень полезен для вас в этой ситуации.

CTest1.cpp:9: error: invalid conversion from 'int' to 'int*'

Это говорит о том, что вы даете функции int, тогда как функция ожидает int*.

CTest1.cpp:9: error:   initializing argument 1

Говорит, что проблема в аргументе 1.

Теперь к вашему коду. Смотрите эту строку:

else if (arr[n-1] == isPalindrome(arr[((n-1) - n) +1 ], n))

Вы можете видеть, что первый аргумент, который вы отправляете, является не int* (т.е. не указателем на массив), а элементом массива. Вы отправляете int в качестве первого аргумента.

Попробуйте переработать свой код с учетом этого.

person windenergy    schedule 13.11.2014