Я знаю, что это неправильно, но просто узнайте, как выполнять рекурсивные функции и пытаетесь понять, как это можно улучшить.
#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.
Проблема 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 даст результат.
Один подсказку: getUpper
возвращает значение без учета count
.
return getUpper(s.substr(1,s.size()-1), high-1); // no 'count'
BTW, getUpper("WeLC")
должен возвращать 3
, а не 4
.
Осознайте, что каждый рекурсивный getUpper
имеет свою собственную копию локального переменного count
. count++
не делает ничего полезного, поскольку переменная фактически не используется ни для чего после приращения.