int countEven(int arr[i]){
Параметры должны иметь простые имена и не должны совпадать с выражениями, передаваемыми в. arr[i]
не является допустимым именем. Простое имя для использования здесь: n
.
//I'm not sure what to do here... how to fix it...
int evens = 0;
if(arr[i] <= 0) return 0; //base case
Этот базовый случай неверен по двум причинам. Во-первых, вы рассматриваете все отрицательные целые числа как базовый случай, но -202020
имеет шесть четных цифр. Во-вторых, вы возвращаете неправильное значение: 0
имеет одну четную цифру, но вы возвращаете ноль.
Возможный базовый вариант может быть n > -10 && n < 10
(однозначное число). Я дам вам понять выражение, которое нужно вернуть для этого базового случая.
while(arr[i] > 0){
Если ваша задача - написать рекурсивную функцию, то вам не следует использовать цикл здесь. Вместо этого см. Ниже.
int digit = arr[i]%10; //get the last digit
...
arr[i] = arr[i]/10;
Это правильный способ получения последней цифры и всего, кроме последней цифры.
if(digit%2 == 0)
Это правильный способ определения четности последней цифры.
Теперь вам нужно объединить то, что у вас есть, заметив, что количество четных цифр равно «1, если последняя цифра четная, иначе 0», плюс количество четных не последних цифр. Цель этого упражнения - заставить вас записать «количество даже не последних цифр» как countEven(n / 10)
.