Либо внутри свойства держать признак того что оно посещено (в алгоритмах на графах такое используется, например окрашивание вершин при поиске в глубину), либо, как написали выше, хранить посещенные (например, в хеш-таблице).
При этом, кстати, алгоритму не нужно быть рекурсивным. Можно использовать очередь.
Помещаешь в очередь первый элемент, а далее цикл пока очередь не пустая.
В цикле выбираешь из очереди первый элемент и закидываешь в очередь всех его не посещенных потомков. Посещаешь выбранный элемент.
См. "поиск в ширину" и "поиск в глубину".