Конечно: делайте это только в целях обучения или когда вы уверены, что ваш собственный Список действительно лучше для вашего варианта использования
Это зависит. Возможно, ваш компилятор обнаружит хвостовую рекурсию и выдаст код, который концептуально эквивалентен использованию цикла.
Если нет, то да, это будет повторяться. Обычно на товарных коробках возможны несколько тысяч рекурсий, если давление в стеке небольшое (как в вашем случае). Однако нет никакой гарантии, и действительно, для действительно больших списков это может быть проблемой.
Кроме того, я думаю, что рекурсия действительно не совсем подходит для концепции родственных узлов. Иерархия узлов, как и quadtree , требует рекурсии, но я не очень хорошо думаю о рекурсии (которая формирует вызов иерархия ), когда концепция списка о родственный -nodes.
Вы также можете считать ручной цикл простой в достижении оптимизации по сравнению с рекурсией, которая сделает ваш код более надежным и надежным.
Кстати, вы также можете должны удалить удаление узлов в класс держателей:
class List {
public:
~List() {
for-each-node
delete-node
}
private:
class Node {
Node *node_;
...
};
...
};
По сути, так обычно реализуется список стандартной библиотеки. Это делает всю реализацию проще для достижения и концептуально более корректной (узлы не владеют их логически близкими)