为什么cal函数总是返回真值?

时间:2017-01-04 04:41:02

标签: c++ function recursion

当输入为pos时,期望cal函数返回false。但是cal函数alaways返回true。

#include <bits/stdc++.h>
using namespace std;

bool cal(string s)
{
    int l=s.size();
    if(l==1)
        return false;
    int l2=l/2;
    if(l%2==0)
    {
        string s1=s.substr (0,l2);
        string s2=s.substr(l2,l2);
        if(s1==s2)
            return true;
        cal(s1);
        cal(s2);
    }
    else
    {
        string s1=s.substr (0,l2);
        string s2=s.substr(l2+1,l2);
        if(s1==s2)
            return true;
        cal(s1);
        cal(s2);
    }
}

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        string s;
        cin>>s;
        bool a;
        a=cal(s);
        if(a==true)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
}

1 个答案:

答案 0 :(得分:0)

在两个逻辑路径中,您调用 cal(s1)并丢弃该值,然后调用 cal(s2),同样忽略返回值。因此,你返回的是你没有明确订购的东西;我希望它是 cal(s2)的偶然价值。

你打算为那些s1!= s2?

的分支做什么?

我不确定你要做什么;变弱的变量名称和缺乏评论让我们猜测你的预期行动。为什么 pos (无论你的意思是什么)输入返回false?

此外,您的代码中可能存在逻辑错误。看来你正在尝试将一个字符串分成两半;你打算丢失一个奇长字符串的中间字符吗?

    string s1=s.substr (0,l2);
    string s2=s.substr(l2+1,l2);