Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Ragionamento Corretto ES2 HW4BIS

a
alessandro.c (910 points)
4 9 16
in HW4bis by (910 points)
recategorized by
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)
11 42 297
by (45.7k 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)
4 9 16
by (910 points)
Chiaro, grazie. Quindi per quello che mi stai dicendo conviene lavorare con le liste?
_andrea_ (45670 points)
11 42 297
by (45.7k 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