twig で再帰処理をしたい場合は、 macro を使う
{% macro recursiveCategories(Category) %}
{% if Category.hasChildNodes() %}
<ul>
{% for child in Category.childNodes() %}
<li>{{ child.name }}</li>
{{ _self.recursiveCategories(child) }}
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
{% if Category.hasChildNodes() %}
<ul>
{% for ChildCategory in Category.childNodes() %}
<li>{{ ChildCategory.name }}</li>
{{ _self.recursiveCategories(ChildCategory) }}
{% endfor %}
</ul>
{% endif %}