Minimum Number of Jump

I am getting Stack Over Flow

private static int minJump(int n, int[] arr, int[] dp, int k) {
if (n == arr.length - 1) {
return 0;
} else if (arr.length < n || k >= arr.length) {
return Integer.MAX_VALUE;
}
if (dp[n] != -1) {
return dp[n];
}

    int min = Integer.MAX_VALUE;

    for (int i = arr[k]; i > 0; i--) {

        int val = minJump(n + i, arr, dp, k + i) + 1;
        if (val > 0 && min > val) {
            min = val;
        }
    }
    dp[n] = min;
    return min;
}