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