|109|warning: control reaches end of non-void function|

i cant see what case it misses?

Code:

int merge_strings(char str1[], int index1,char str2[],int index2, char result[], int index3)
{
int answer;
if ((str1[index1]=='\0') && (str2[index2]=='\0'))
{
result[index3] = '\0';
return 1;
}
else if (((str1[index1]>='a')&&(str1[index1]<='z')) || ((str1[index1]>='A') && (str1[index1]<='Z'))
&& ((str2[index2]>='a')&&(str2[index2]<='z')) || ((str2[index2]>='A') && (str2[index2]<='Z'))
|| ((str1[index1]=='\0') || (str2[index2]=='\0')))
{
if (str2[index2]=='\0')
{
if (str1[index1]>=result[index3-1])
{
result[index3]=str1[index1];
answer=merge_strings(str1,index1+1,str2,index2,result,index3+1);
if (answer == 0)
return 0;
else
return 1;
}
else
return 0;
}
else if (str1[index1]=='\0')
{
if (str2[index2]>result[index3-1])
{
result[index3]=str2[index2];
answer=merge_strings(str1,index1,str2,index2+1,result,index3+1);
if (answer == 0)
return 0;
else
return 1;
}
else
return 0;
}
else if ((str1[index1]<=str2[index2]))
{
if (str1[index1]>=result[index3-1])
{
result[index3]=str1[index1];
answer=merge_strings(str1,index1+1,str2,index2,result,index3+1);
if (answer == 0)
return 0;
else
return 1;
}
}
else if ((str2[index2]<=str1[index1]))
{
if (str2[index2]>result[index3-1])
{
result[index3]=str2[index2];
answer=merge_strings(str1,index1,str2,index2+1,result,index3+1);
if (answer == 0)
return 0;
else
return 1;
}
}
}
else
{
return 0; // ERROR was found - > you return 0;
}
}