Rearrange an array in place such that the first and last halves are interleaved
The recursion results in \$O(n)\$ space complexity (each recursive invocation consumes some stack), so technically you did not fulfill the requirement of _not using extra space. Since it is a tail recursion, it can easy to eliminate. Unfortunately, Java doesn't do it, so you have to eliminate it manually. Fortunately, it is just a mechanical rewrite.
The time complexity is \$O(n^2)\$. There is not much to do with the current approach. There is however a linear solution: an element at index k goes to either 2k, if k &lt; n/2, or 2k - n + 1 otherwise. Convince yourself that this permutation has no loops, and just follow a chain of indices.
The loop

for (int i = swapInd2 ; i &gt; swapInd1; i--) {
    arr[i] = arr[i - 1];
}


shifts a range, and deserves to be a function on its own (shift_rangeperhaps).