В твоей реализации функции много лишних элементов которые сильно усложняют код.
Например
FILE* res
тебе в ней вообще не нужен.
От
i
так же можно отказаться.
По сути тебе нужен только указатель на первый элемент и количество элементов в массиве.
int recursion(int* x, int n)
{
if(n > 2) {
return recursion(x, n/2) * recursion(x + n/2, n - n/2);
} else if(n ==2) {
return x[0] * x[1];
} else {
return x[0];
}
}
Деление массива на части происходит путём передачи 2 половинок предыдущего массива и их размеров.
На всякий случай обращу внимание.
n - n/2
используется потому что происходит целочисленное деление и округление.