Ho appena saputo della ricorsione in Python e ho completato i compiti, uno dei quali era contare tutti gli elementi in un elenco di liste arbitrariamente annidate. Ho cercato questo sito e le risposte trovate sembrano utilizzare tutte le chiamate ricorsive. Poiché è stato insegnato che tutto ciò che potrebbe essere espresso in modo ricorsivo potrebbe essere espresso in modo iterativo, e l'iterazione è preferibile in Python, come sarebbe possibile farlo senza ricorsione o moduli importati in Python 2.6 (come esercizio di apprendimento)? (Una lista annidata stessa sarebbe essere considerato come un elemento, come farebbe il suo contenuto.) Ad esempio:Conta tutti gli elementi nell'elenco di elenchi nidificati arbitrari senza ricorsione
>>> 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
Come potrebbe questo essere scritta utilizzando l'iterazione?
L'iterazione è preferibile per cose come loop semplici. Per problemi intrinsecamente ricorsivi come questo, la ricorsione è migliore. – interjay
Questo era più di un esercizio di apprendimento che una dichiarazione di principio. E sembra essere più facile esprimere una soluzione in modo ricorsivo. Tuttavia, se la quantità di chiamate ricorsive necessarie è sconosciuta in anticipo, questo esercizio non sarebbe pratico e necessario? –
Non dovrebbe 'element_count ([1, [1, 2, [3, 4]]])' essere 5? Perché contate gli oggetti in sottotitoli come elementi? –