Can someone explain to me why the output is 6? And what does the line `return refun(a-1,b-1)*a;` mean?

The code is below:

```
#include <iostream>
using namespace std;

long refun(int a, int b) {
    if (a >= 0 && b == 0)
        return 1;
    else if (a == 0 && b>0)
        return 0;
    else
        return refun(a - 1, b - 1)*a;
}

int main()
{
    int x = 3, y = 2;
    long z = refun(x, y);
    cout << z;
    return 0;
}

```