Я довольно новый с рекурсией. Мне нужно написать две функции. Пока я написал один, который дает право на поиск длины строки. Однако второй, который заключается в следующем: поиск повторяющегося символа в массиве оказывается очень сложным. Я просмотрел веб-страницы, пытаясь найти примеры, я много читал, но ничего до сих пор. Поэтому, если бы вы могли указать мне в правильном направлении, я был бы очень признателен.Найти количество символов в массиве с использованием рекурсии
Спасибо
//length() -- this function is sent a null terminated array of characters.
//The function returns the length of the "string".
long slength (const char ntca[])
{
int length = 0;
if (ntca[length] == '\0'){
return 0;
}
else{
return slength(ntca+1)+1;
}
}
//countall() -- This function is sent a null terminated array of characters
//and a single character. The function returns the number of times the character
//appears in the array.
long countall (const char ntca[],char letter){
int position = 0;
int counter = 0;
long length = slength(ntca);
if (length == 0)
return 0;
else if (ntca[position]==letter)
return 1 + countall(ntca-1,letter);
else
return countall(ntca,letter);
}
Обратите внимание, что я бы написал рекурсивную длину строки, но кажется, что функция длины хочет прочитать 'long slength (char const * s) {return * s? 1 + slength(): 0; } ' –
Вы близко. Обратите внимание, как в первой функции вы перемещаете один символ вперед в строке каждый раз? Вы должны сделать то же самое в 'countall()', как в том случае, когда «letter» соответствует, так и в том случае, если это не так. В одном случае вы в настоящее время поддерживаете резервную копию (на неизвестной территории); в другом случае вы просто вызываете 'countall' на одного и того же символа снова и снова. –
Вы, конечно же, не хотите вычислять длину строки для второй функции! Если строка не пустая, добавьте 1, если передним символом является запрошенная буква к результату 'countall()' с хвостом строки: 'long countall (char const * s, char l) {return (* s == l) + (* s? countall (s + 1, l): 0); } '. Ваша ошибка в том, что вы либо придерживаетесь одной позиции, либо даже возвращаетесь назад! –