RainCode fully supports recursion:
PROCEDURE Fact (i); BEGIN IF i <= 0 THEN RESULT := 1; ELSE RESULT := i * Fact(i-1); END; END Fact;