2014-10-22 3 views
0

Может кто-нибудь, пожалуйста, скажите, что я делаю неправильно в своем коде? Мне нужно подсчитать количество случаев гласных в строке, используя рекурсию. Функция isVowels проверяет, является ли символ гласным, и он работает. Но этот код ниже не работает ...Рекурсивно подсчитать количество гласных в строке (JavaScript)

function countVowels(str) { 
    var length = str.length; 
    if (length == 0) { 
     return 0; 
    } 
    if (isVowel(str.charAt(length)) == false) { 
     return countVowels(str.substring(0, length - 1)); 
    } 
    return 1 + countVowels(str.substring(0, length - 1)); 
} 
+0

Что значит «не работает» означает в данном случае ? Вы получаете неправильный результат? Вы получили сообщение об ошибке? –

+0

Для всех разных случаев я получаю 0 в результате – Nat

+0

, потому что вы закончите с длиной 0 в конце вашей рекурсии. – ltalhouarne

ответ

4

Символы в строке являются - так же, как элементы массива - zero-indexed. Вам нужно будет использовать .charAt(length-1), или вы получите символ после окончания строки (что дает пустую строку). Это следует сделать это:

function countVowels(str) { 
    var length = str.length; 
    if (length == 0) { 
     return 0; 
    } 
    if (isVowel(str.charAt(length - 1)) == false) { 
     return countVowels(str.substring(0, length - 1)); 
    } 
    return 1 + countVowels(str.substring(0, length - 1)); 
} 

Однако, вы могли бы упростить это, не называя рекурсивную часть дважды, и считая с фронта:

function countVowels(str) { 
    if (str.length == 0) 
     return 0; 
    return (isVowel(str.charAt(0)) ? 1 : 0) + countVowels(str.slice(1)); 
} 
Смежные вопросы