подсчет букв верхнего регистра в рекурсивной функции

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.

Теги:
recursion

3 ответа

0

Проблема s, когда u вызывать каждую tym, подсчитывает ваш счет функции, поэтому в конечном итоге это будет 0 на последнем тиме, который он назвал. Лучшее решение имеет счет как глобальный var.For Eg

int count1=0;

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

int count = 0; if (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 даст результат.

0

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

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

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

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню