我知道这是错的,但只是学习如何做递归函数并试图理解如何更好地解决这个问题。
#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 :(得分:0)
一个提示:getUpper
返回值而不包含count
。
return getUpper(s.substr(1,s.size()-1), high-1); // no `count`
BTW,getUpper("WeLC")
应该返回3
,而不是4
。
答案 1 :(得分:0)
意识到getUpper
的每个递归调用都有自己的局部变量count
的副本。 count++
没有做任何有用的事情,因为变量实际上并没有在增量之后用于任何事情。
答案 2 :(得分:0)
问题是当你调用每个tym时你的函数计数被初始化,所以最终它会在它调用的最后一个tym中为0。所以更好的解决方案是将其作为全局变量。对于E.g
int count1=0;
int getUpper(const string&amp; s,int high){
int count = 0; if(s.size()&gt; 0){
if (s[0] <='Z' && s[0] >='A')
count++;
count1++;
return getUpper(s.substr(1,s.size()-1), high-1);
}
return count1;
}
现在count1将给出结果。