微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用递归的子串数

如何解决使用递归的子串数

我正在尝试理解递归。我创建了一个程序来计算 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 举报,一经查实,本站将立刻删除。