iterator and recursive