Ragionamento Corretto ES2 HW4BIS

a
alessandro.c (910 points)
0 8 16
asked Apr 1, 2019 in HW4bis by alessandro.c (910 points)
recategorized Apr 15, 2019 by andrea.sterbini
Ho provato sia a costruire una lista( con _|_ etc) come ho letto in qualche domanda su questo forum, sia a costruire direttamente la stringa dalla funzione ricorsiva che attraversa l'albero, ma sinceramente in entrambi i casi ho avuto qualche problema.

A me sembra che costruire la stringa direttamente sia la soluzione più efficace ma mi chiedo come fate a gestire il problema che la ricorsione non attraversa l'albero in maniera ordinata, mi spiego:

Se ho:

        03
          |
______ ______
|          |           |

01      05        05
|
03

La funzione ricorsiva arriverà prima a leggere lo 03 sotto lo 01 e successivamente i due 05, quindi non ho modo di ritornare indietro dopo aver generato quelle righe. Dove mi sono perso?

1 Answer

_andrea_ (45670 points)
2 39 297
answered Apr 2, 2019 by _andrea_ (45,670 points)
La funzione la chiami su 03 che prima di finire la chiama su 01 che prima di finire la chiama su 03. 03 ritorna 03 e 01 lo prende, ci lavora e ritorna 01+03, poi 03 la chiama ancora su 05 che ritorna 05 e di nuovo su 05 che ritorna 05. 03 ottiene 01+03, 05, 05. Li unisce e ottiene 03+((01+03),05,05)
a
alessandro.c (910 points)
0 8 16
commented Apr 2, 2019 by alessandro.c (910 points)
Chiaro, grazie. Quindi per quello che mi stai dicendo conviene lavorare con le liste?
_andrea_ (45670 points)
2 39 297
commented Apr 2, 2019 by _andrea_ (45,670 points)
È uguale. Puoi anche concatenare ogni riga a ogni livello con \n ma dopo penso che dovresti splittarla per individuare le righe singole. Se invece lavori con le liste alla fine devi solo joinarle con \n una volta sola e ottieni la stringa giusta