Allora il programma non ha solo quella funzione, ma da lì viene gran parte dei dati che poi utilizzo per 'risolvere' il test in corso, alla funzione combo passo principalmente la lunghezza della stringa iniziale -1, una variabile booleana per vedere i vincitori successivamente, la stringa iniziale e altre variabili o liste di supporto che servono per calcolare altezza e cose simili.
Tendo a precisare che dentro la funzione ricorsiva c'è un ciclo while che continua fino a che la x non è uguale alla lunghezza della stringa corrente -1, questa cosa sarà spiegata più avanti.
La funzione combo è una funzione che, partendo dalla stringa originale, scende man mano facendo tutte le possibili 'combinazioni' e, una volta arrivata al capolinea, ritorna su facendo poi tutte le altre possibili combinazioni, per tornare su semplicemente rende la stringa corrente uguale alla penultima stringa che ho trovato, mentre per andare avanti negli indici di tutte le combinazioni la situazione è la seguente, quando troviamo una nuova combinazione e quindi 'scendiamo' si aggiunge ad una lista di indici il numero 0 , mentre quando 'risaliamo' la situazione cambia perché prendiamo il penultimo indice che abbiamo trovato e gli aggiungiamo 1, la x poi diventerà uguale a questo penultimo indice, ciò porta così a non bloccarsi in un ciclo infinito dove la funzione farebbe su e giù sempre nella stessa combinazione. Nel ciclo while si ha la 'ciccia' di questa funzione, ché molto piccola a vederla, una volta controllato i criteri per fare a - b, lo fa e genera la nuova stringa, qui succede la cosa più importante, si aggiunge ad una lista creata in precedenza una tupla formata da:
( padre, figlio, vincitore, altezza )
Da questa lista di tuple poi estrapolo tutto ciò che mi serve tramite varie altre funzioni.. bene o male questo è tutto.