recursive and non recursive