在递归函数中计算大写字母

时间:2013-10-07 04:06:53

标签: c++ recursion

我知道这是错的,但只是学习如何做递归函数并试图理解如何更好地解决这个问题。

    #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。

3 个答案:

答案 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将给出结果。