2013-10-07 4 views
0

Я знаю, что это неправильно, однако просто учитесь делать рекурсивные функции и пытаться понять, как это лучше работать.подсчет букв верхнего регистра в рекурсивной функции

#include <iostream> 
    using namespace std; 


    int getUpper (const string& s, int high) { 

     int count=0; 


     if(s.size()>0) { 

     if (s[0] <='Z' && s[0] >='A') 
      count++; 

     return getUpper(s.substr(1,s.size()-1), high-1); 

    } 
    return count; 
} 

    int getUpper (const string& s){ 
     int high=s.size()-1; 

     int count=getUpper(s,high); 
     return count; 
    } 


    int main() 
    { 
    string s="WeLC"; 
    int value=getUpper(s); 
    cout << value; 
     return 0; 
    } 

Почему это не возвращает номер счета? от 4.

+0

В качестве побочного примечания 'std :: count_if' является правильным способом для этого. – chris

ответ

0

Один совет: getUpper возвращает значение без учета count.

return getUpper(s.substr(1,s.size()-1), high-1); // no `count` 

BTW, getUpper("WeLC") должен возвращать 3, не 4.

0

Поймите, что в каждом рекурсивном вызове getUpper есть своя локальная переменная count. count++ не делает ничего полезного, поскольку переменная фактически не используется ни для чего после приращения.

0

Проблема сек, когда и созвонимся Тымь Ваш подсчет функция инициализируется так, в конечном счете, будет 0 в последнем Тымь это called.So лучшее решение, это есть счетчик, как глобальное var.For Eg

int count1=0; 

ИНТ getUpper (const string & s, int high) {

int count = 0; если (s.size()> 0) {

 if (s[0] <='Z' && s[0] >='A') 
     count++; 
    count1++; 

    return getUpper(s.substr(1,s.size()-1), high-1); 

} 
return count1; 

}

Теперь count1 даст результат.

Смежные вопросы