Coding a recursive function for highest possible input Challenge
You are given the following function:-  which is the same as:-

with the base cases q(r, b, L) = 1 whenever r ≤ L, q(r, 0, L) = 0, if r &gt; L and  q(r, 0, L) = 1, if r ≤ L.
Your task is to code a program that takes r as input, and outputs the value of q(r, r - L, L) for all L taking integer values from 1 to (r-1), where r is any nonnegative integer.
Example 1
Input

Enter the value of r: 2

Output

q(2,1,1) = 0.3333333333

Example 2
Input

Enter the value of r: 3

Output

q(3,2,1) = 0.1
q(3,1,2) = 0.5

Winning criterion
The code that can correctly output q(r, r-L, L) for all L taking integer values from 1 to (r-1), for the highest value of r, in less than 300 seconds. In case of a tie, the code with lesser runtime will be considered. As this is a runtime-based challenge, I shall test all submissions on my machine.
Java

I've applied some algebraic transformation and dynamic programming.

public class CodeGolf42234 {
    public static void main(String[] args) {
        int r = Integer.parseInt(args[0]);
        for (int L = 1; L &lt; r; L++) System.out.println(qDouble5(r, r-L, L));
    }

    private static double qDouble5(int _r, int _b, int L) {
        double[][] q = new double[_r+1][_b+1];
        for (int r = 0; r &lt;= L; r++) {
            for (int b = 0; b &lt; q[r].length; b++) q[r][b] = 1;
        }
        for (int r = L + 1; r &lt; q.length; r++) {
            for (int b = 1 + (r - L - 1)/L; b &lt; q[r].length; b++) {
                double sum = 0, m = 1;
                for (int k = 0; k &lt;= L; k++) {
                    sum += m * q[r-k][b-1];
                    m = m * (r - k) / (r + b - 1 - k);
                }
                q[r][b] = sum * b / (r + b);
            }
        }
        return q[_r][_b];
    }
}