A volte nelle interviste, posso usare la ricorsione per risolvere un problema (come aggiungere 1
a un numero intero di precisione infinito) o quando il problema si presenta adatto per ricorrere alla ricorsione. A volte, potrebbe essere semplicemente riconducibile all'uso della ricorsione per risolvere i problemi, quindi senza pensare molto, la ricorsione viene utilizzata per risolvere il problema.
Tuttavia, quali sono le considerazioni prima che tu possa decidere che sia adatto per ricorrere alla ricorsione per risolvere un problema?
Alcuni pensieri che ho avuto:
Se usiamo la ricorsione su dati che si dimezzano ogni volta, sembra che non sia un problema ricorrere alla ricorsione, dato che tutti i dati che possono essere contenuti in 16 GB di RAM, o anche un disco rigido da 8 TB, possono essere gestiti dalla ricorsione solo 42 livello profondo. (quindi nessun overflow dello stack (credo che in alcuni ambienti, lo stack può essere profondo 4000, molto più di 42, ma allo stesso tempo, dipende anche da quante variabili locali hai, come ogni stack di chiamate, occupa più memoria se ci sono molte variabili locali, ed è la dimensione della memoria, non il livello, che determina l'overflow dello stack)).
Se calcoli i numeri di Fibonacci utilizzando la ricorsione pura, devi davvero preoccuparti della complessità del tempo, a meno che non memorizzi nella cache i risultati intermedi.
E che ne dici di aggiungere 1
a un numero intero di precisione infinito? Forse è discutibile, come, lavorerai con i numeri che sono di 3000 cifre di lunghezza o di 4000 cifre, così grande da causare un overflow dello stack? Non ci ho pensato, ma forse la risposta è no, non dovremmo usare la ricorsione, ma semplicemente usare un ciclo semplice, perché cosa succede se in alcune applicazioni, il numero deve essere composto da 4000 cifre, per verificare proprietà del numero, ad esempio se il numero è primo o meno.
L'ultima domanda è: quali sono le considerazioni prima di poter decidere di utilizzare la ricorsione per risolvere un problema?