Если вход считается ожидаемым, функция cal возвращает false. Но функция cal alalays возвращает true.Почему функция cal всегда возвращает истинное значение?
#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;
}
}
Я предполагаю, что ваш компилятор предупредил вас, что не все пути управления возвращаются. – drescherjm
Кстати, поскольку выражение 'cal()' '' if ... else' отличается только одной строкой, это единственная строка, которая фактически должна контролироваться им. См. [Здесь] (http://ideone.com/kQpJtn) для примера того, что вы могли бы сделать. –