Non sono a conoscenza di libri specifici per la ricorsione, ma sono trattati approfonditamente in quasi tutte le introduzioni al libro degli algoritmi.
Fin quando puoi usare la ricorsione, potresti usarlo praticamente su qualsiasi algoritmo. In alcuni linguaggi di programmazione funzionale, devi usare la ricorsione per le cose per le quali altre lingue usano i cicli. Se vuoi praticare la ricorsione, l'apprendimento di una lingua funzionale è un buon passo e troverai tantissimi esempi di ricorsione nei loro tutorial.
Quando è utile usare la ricorsione è un'altra domanda. Mi vengono in mente due situazioni. Il primo è quando ti ritrovi a usare uno stack per una struttura dati. In questa situazione, l'uso della ricorsione ti dà automaticamente uno stack, quindi non devi preoccuparti di quei dettagli. L'altra situazione è quando si dispone di un numero elevato di cicli nidificati o di un livello sconosciuto di nidificazione. La ricorsione rende i loop di nidificazione molto semplici.
Il trucco per comprendere la ricorsione consiste nel non provare a trattenere l'intero stack nella tua testa. Concentrati solo su una piccola parte alla volta. Pensa al tuo stato attuale e confida che i livelli più profondi funzionino come pubblicizzati.