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);
}