Già avevo pensato ad una soluzione simile, dato che è maggiormente ottimizzato poiché esegue 2^x iterazioni, mentre il mio esempio è qualcosa come x*(x!), dunque il risparmio è notevole.
Il problema è che impossibile da implementare, cioè non saprei proprio da dove iniziare.
Si potrebbe fare un vettore di boolean in cui ogni esponente di due cambi il valore di se stesso e del suo vicino, ci ragionerò su.