This is what I came up with: (this is technically C++ though)

void f(int i, int j, int k, bool ri, bool rj, bool rk)
// ri , rj, rk-> whether to recurse on i,j,k or not respectively
{
        if (!ri && !rj && !rk)
                return;
        if ( (i == 0) && ri)
        {
                f(i,j,k,0,1,1);
                return;
        }
        else if ( (j == 0) && rj)
        {
                f(i,j,k,ri,0,1);
                return;
        }
        else if ( (k == 0) && rk)
        {
                f(i,j,k,ri,rj,0);
                return;
        }
        if (ri)
        {
                f(i-1,j,k,1,1,1);
                f(i,j-1,k,0,1,1);
                f(i,j,k,0,0,1);
        }
        else if (rj)
        {
                f(i,j-1,k,0,1,1);
                f(i,j,k,0,0,1);
        }
        else if (rk)
        {
                for (int p = 0; p <= k; ++p)
                        cout << i << " " << j << " " << p << endl;
        }
}
int main()
{
        f(5,5,5,1,1,1);
}

Reply via email to