使用递归的子串数

问题描述

我正在尝试理解递归。我创建了一个程序来计算 n 个字符的字符串中的子字符串数。 Ans 应该是 n*(n+1)/2。但是对于 2 个字符的字符串,我得到 2 个作为 ans,而对于 3 个字符,它会进入无限循环。

   int num_substring(string str,int &sidx,int eidx,int &num) {

       cout<<"sidx == "<<sidx<<" eidx == "<<eidx<<"num  "<<num<<endl;
       
       if(sidx >= str.length()-1) return num;  // counted all substrings

       //move starting index and start finding new substrings.
       if(eidx == str.length()-1) {
           sidx = sidx+1;
           eidx = sidx;
           cout<<"eidx reached"<<sidx<<"  "<<eidx<<endl;

       }

       for(int i = sidx; i<= eidx; i++){
         ++num;
         num_substring(str,sidx,i+1,num);
         cout<<"sidx after "<<sidx<<endl;
       }

       return 0;

    }


    int main()
    {
        string str = "ab";
        int num = 0;
        int sidx = 0;
        num_substring(str,num);
        cout<<num<<endl;
    }

输出

sidx == 0 eidx == 0num  0
sidx == 0 eidx == 1num  1
eidx reached1  1
sidx == 1 eidx == 2num  2
sidx after 1 ---> why is sidx 1? Shouldnt it be 0
sidx after 1
2

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)