Właśnie dowiedziałem się o rekursji w Pythonie i ukończyłem zadania, z których jednym było zliczanie wszystkich elementów na liście dowolnie zagnieżdżonych list. Przeszukałem tę stronę, a wszystkie znalezione odpowiedzi wydają się korzystać z wywołań rekursywnych. Ponieważ nauczono go, że wszystko, co może być wyrażone rekurencyjnie, może być wyrażane iteracyjnie, a w Pythonie preferowane jest iterowanie, w jaki sposób można to osiągnąć bez rekursji lub importowanych modułów w Pythonie 2.6 (jako ćwiczenie uczenia się)? (Lista zagnieżdżona sama będzie traktowany jako element, podobnie jak jego zawartość). Na przykład:Policz wszystkie elementy na liście arbitralnie zagnieżdżonej listy bez rekurencji
>>> def element_count(p):
... count = 0
... for entry in p:
... count += 1
... if isinstance(entry, list):
... count += element_count(entry)
... return count
>>> print element_count([1, [], 3])
3
>>> print element_count([1, [1, 2, [3, 4]]])
7
>>> print element_count([[[[[[[[1, 2, 3]]]]]]]])
10
Jak miałoby to być napisane przy użyciu iteracji?
Iteracja jest preferowana dla rzeczy takich jak proste pętle. Z natury problemów rekursywnych, takich jak ten, rekurencja jest lepsza. – interjay
To było bardziej ćwiczenie edukacyjne niż stwierdzenie zasad. Wydaje się, że łatwiej jest wyrazić rozwiązanie rekursywnie. Jednakże, jeśli ilość potrzebnych rekurencyjnych połączeń nie jest wcześniej znana, czy to ćwiczenie nie byłoby praktyczne i konieczne? –
Czy nie należy "element_count ([1, [1, 2, [3, 4]]])" być 5? Dlaczego zlicza się obiekty podlisty jako same elementy? –