Warto wspomnieć, że every recursion can be converted into iteration, chociaż czasami, że może nie być tak łatwo. Dla szczególnego przykładu w tym pytaniu, jest to prosta sprawa, to tylko kwestia zebrania oczekiwanego wyniku w zmiennej i przejścia przez listę wejściową w odpowiedniej kolejności. To, co mam na myśli:
def convert(lst):
acc = {}
for e in reversed(lst):
acc = {e: acc}
return acc
Albo jeszcze krócej, powyższy algorytm może być wyrażona jako jedno-liner (zakładając Pythona 2.x, w Pythonie 3.x reduce
został przeniesiony do modułu functools
). Zauważ, że nazwy zmiennych w poprzednim rozwiązaniu odpowiadają parametrami lambda, a jak w obu przypadkach wartość początkowa akumulatora jest {}
:
def convert(lst):
return reduce(lambda acc, e: {e: acc}, reversed(lst), {})
Tak czy inaczej, funkcja convert
działa zgodnie z oczekiwaniami:
mylist = ['a','b','c','d']
convert(mylist)
=> {'a': {'b': {'c': {'d': {}}}}}
Cóż, rekurencja === iteracja, więc tak. Czy masz jakiś kod, aby pokazać, co próbujesz? Być może odpowiedź może z tego wyjść. – Makoto
można użyć po prostu 'map',' zmniejszyć' –
@Makoto nie ma konkretnego przypadku użycia, które mam na myśli. Po prostu przeglądałem kilka projektów FOSS i zauważyłem, że większość, jeśli nie wszystkie, używa rekurencji (nie jest niepoprawna). Po prostu zastanawiałem się, czy istnieje alternatywa dla rekurencji. Odpowiedź Óscar López jest dość wnikliwa (zwłaszcza link). –