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

Why does cal function always return true value?

本文关键字:返回 cal 函数 为什么      更新时间:2023-10-16

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

#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;
    }
}

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

你打算对那些分支有什么打算,其中 s1 != s2 ?

我不确定你想做什么;发育不良的变量名称和缺乏评论让我们猜测你的预期操作。 为什么 pos(不管你的意思是什么)输入返回 false?

此外,代码中可能存在逻辑错误。 您似乎正在尝试将字符串分成两半;您是否打算丢失奇数长度字符串的中间字符?

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