/* ----------------------------------------------- two recursive calls ----------------------------------------------- */ fact(0,1). fact(N,F) :- N>0, N1 is N-1, fact(N1,F1), F is N * F1. /* ----------------------------------------------- one recursive call instead of two ----------------------------------------------- */ fact3(0,F,F). fact3(N,A,F) :- N > 0, A1 is N*A, N1 is N -1, fact3(N1,A1,F).