Вы должны использовать что-то вроде
int factstart(int num){
if(num<0) return -1;
else return num * fact(num-1);
}
int fact(int num){
if(num == 0) return 1;
else return num*fact(num-1);
}
причина, по которой люди используют 1 или 0, заключается в том, что большую часть времени они получают ответ, но это не защитное программирование., и если для любого из них задано отрицательное число, то ответом будет какое-то случайное значение, а если 0 дается для случая, когда они равны 1, то это даст 0, даже если 0 факториал равен 1