Python ha una profondità di ricorsione massima, ma nessuna profondità di iterazione massima. Perché la ricorsione è limitata? Non sarebbe più naturale trattare la ricorsione come l'iterazione e non limitare il numero di chiamate ricorsive?Perché Python ha una profondità di ricorsione massima?
Lasciatemi dire che la fonte di questo problema deriva dal tentativo di implementare uno stream (vedere this question per ulteriori dettagli sugli stream). Per esempio, diciamo che vogliamo scrivere un flusso per produrre i numeri naturali:
def stream_accum(s, n): # force the stream to a list of length n
def loop(s, acc):
if len(acc) == n:
return acc
hd, tl = s()
return loop(tl, acc + [hd])
return loop(s, [])
def nats():
def loop(n):
return n, lambda: loop(n+1)
return loop(1)
La definizione ricorsiva di flussi è abbastanza attraente. Comunque, immagino che l'approccio migliore/più pitoni sarebbe usare i generatori.
La soluzione ricorsiva "accattivante" ha un numero di aspetti sgradevoli. Innanzitutto, ha un comportamento O (n ** 2) perché stai costruendo continuamente nuovi elenchi per estenderli. In secondo luogo, è eccessivamente complesso dato che si può semplicemente iterare per produrre numeri naturali. Questo è un esempio di come scrivere Python come Scheme o Haskell. Lingue diverse sono buone a cose diverse. Usa l'iterazione. –