C'est moi qui ait fait la "blague" (en fait la bourde

) de dire que c'était facultatif dans l'implémentation

c'est bon, j'ai écrit ma version, mais avec une variable intermédiaire :
using namespace std;
int fact(int &);
int main()
{
int n = 5;
cout << fact(n);
}
int fact (int & n)
{
int a = n-1;
if (n == 1)
return 1;
else
return n * fact(a);
}
C'est marrant ces espèces de pointeurs qu'on manipule comme des types scalaires ^^