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。

4

3 回答 3

0

一个提示:getUpper返回值而不合并count.

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

顺便说一句,getUpper("WeLC")应该返回3,而不是4

于 2013-10-07T04:15:55.340 回答
0

意识到每个递归调用getUpper都有自己的局部变量副本countcount++没有做任何有用的事情,因为变量在增量之后实际上并没有用于任何事情。

于 2013-10-07T04:16:12.120 回答
0

问题是当你调用每个 tym 时,你的函数计数被初始化,所以最终它将在它调用的最后一个 tym 处为 0。所以更好的解决方案是将计数作为全局变量。例如

int count1=0;

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

整数计数=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 将给出结果。

于 2013-10-07T07:43:50.847 回答