- avoid cycles and infinite recursion