My solution isn't really recursive as a modern compiler will turn the tail recursion into iterative code.
It could be rewritten as
Code:
void mydiff(int * arr1, int * end1, int * arr2, int * end2, int * diff1, int * diff2) {
for(;;) {
if(arr1 == end1) {
getTail(arr2, end2, diff2);
break;
}
if(arr2 == end2) {
getTail(arr1, end1, diff1);
break;
}
while(*arr1 < *arr2 && arr1 != end1) {
*diff1 = *arr1;
diff1++;
arr1++;
}
while(*arr2 < *arr1 && arr2 != end2) {
*diff2 = *arr2;
diff2++;
arr2++;
}
if(*arr1 == *arr2) {
if(arr1 != end1)
arr1++;
if(arr2 != end2)
arr2++;
}
}
}