folco > la fonction peut fonctionner sans variable temporaire, mais il faut utiliset une ref const :
int fact (const int &n)
{
if (n == 1)
return 1;
else
return n * fact(n-1);
}
le compilateur ne peut pas créer une référence non-const sur n-1 car ce n'est pas une variable modifiable mais une valeur (il me semble que c'est équivalent aux problèmes de r-value et l-value que tu as déjà peut-être rencontré en C)
Globalement il faut toujours utiliser des références const quand la fonction ne doit pas modifier le paramètre en entrée. ça t'évitera plein de problèmes de compilation et quand tu rencontreras une fonction qui prend un paramètre non-const tu auras que la fonction est prévue pour modifier le paramètre en entrée