@Worddoc
Frontend explorer

Почему не работает рекурсия?

Хочу написать функцию, которая считает количество гласных в слове и возвращает это число. Хочу инкрементировать счетчик с помощью рекурсии, но она не работает. Почему?

function getCount(str, counter = 0) {
  if (counter >= str.length) return counter;
  
  switch(str[counter]) {
    case 'a': getCount(str, ++counter); break;
    case 'e': getCount(str, ++counter); break;
    case 'i': getCount(str, ++counter); break;
    case 'o': getCount(str, ++counter); break;
    case 'u': getCount(str, ++counter); break;
  }
}
  • Вопрос задан
  • 98 просмотров
Решения вопроса 3
FFxSquall
@FFxSquall
Могу писать код, могу не писать
У вас не описан случай, когда буква согласная, соответственно функция вызывается 1 раз если первая буква согласная. Ну и нужно возвращать результат вызова функции, что бы получить рекурсию. Как-то вот так (можно и нужно оптимизировать)

function getCount(str, i, counter = 0) {
  if (i >= str.length) return counter;
  
  if (['a', 'e', 'i', 'o', 'u'].indexOf(str[i]) != -1) {
    return getCount(str, ++i, ++counter)
  }
  return getCount(str, ++i, counter); 
}
Ответ написан
Комментировать
Согласные никак не обрабатываются, поэтому на первой же согласной выполнение функции оборвется.

Кроме того, в свитче нужно вовращать `getCount`, а не просто вызывать:
function getCount(str, counter = 0) {
  if (counter >= str.length) return counter;
  
  switch(str[counter]) {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u': return getCount(str, ++counter); break;
  }
}


Но в моей функции согласные все еще не учитываются.
Ответ написан
Комментировать
А где собственно подсчет гласных?
counter - это просто номер буквы в слове
+ что по вашему возвращает функция во всех остальных случаях кроме if (counter >= str.length) return counter;?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы