Capisco la ricorsione e la trovo utile e intuitiva mentre risolvo i problemi sugli alberi ma per molti altri problemi la ricorsione non mi impedisce di lasciarmi perplesso. Recentemente stavo risolvendo il seguente problema:
Write a recursive function that counts how many different ways you can make change for an amount, given a list of coin denominations.
Dopo aver provato a fondo e un po 'su Google ho trovato la seguente soluzione e pensarci nei dettagli mi fa girare la testa .
function isEmpty(coins) {
return coins.length === 0;
}
function allButFirst(coins) {
return coins.slice(1);
}
function countChange(money, coins) {
if (money === 0) return 1
else if (money > 0 && !isEmpty(coins)) {
return countChange(money - coins[0], coins) +
countChange(money, allButFirst(coins));
}
else // money < 0
return 0;
}
console.clear();
console.log(countChange(4, [1, 2])); // 3 (1+1+1+1), (1+1+2), (2+2)
AFAIK, il primo passo nella soluzione ricorsiva è verificare se la struttura sottostante è ricorsiva e nel mio caso sì. Ma io sono lì una sorta di principio del modello mentale o qualcosa che potrebbe aiutare a progettare una soluzione del genere, anche qualcosa che potrebbe impedirmi di andare nella direzione sbagliata funzionerebbe?