Esercizi sulla ricorsione svolti in Python

Vi propongo di seguito alcuni esercizi sulla ricorsione svolti con il linguaggio Python. Per chi non sapesse cosa è esattamente la ricorsione potrete trovarlo cercando su WikiPedia è spiegato in maniera abbastanza esaustiva, altrimenti qualsiasi buon libro di Informatica potrà togliervi ogni dubbio. Nel caso foste delle persone veramente pigre vi dirò semplicemente che in informatica la ricorsione è il “richiamare” una funzione dentro se stessa fino a che non si ottiene il risultato cercato senza entrare in un ciclo infinito.
Un certo Peter Deutsch disse:

“L’iterazione è umana, la ricorsione è divina.”

Presto capirete perchè!
Inzialmente vedrete solo il testo dell’esercizio ma cliccando sul testo tra i bordi blu apparirà per magia anche la soluzione. Non è un caso che abbia nascosto la soluzione, potrebbe tornarvi utile sforzare la vostra mente prima di chiedere aiuto. 🙂
Alcuni dei seguenti esercizi sulla ricorsione presentano più di una soluzione in quanto la ricorsione NON ammette solo una soluzione ma ne posso esistere diverse, vediamo se trovate la vostra.

Le soluzioni degli esercizi sulla ricorsione proposti di seguito sono svolti in Python, voi potete utilizzare i testi degli esercizi e risolverli in qualsiasi altro linguaggio di programmazione, in quanto la ricorsione è un metodo matematico replicabile anche in altri ambienti e non appartiene solo al linguaggio Python.

Se siete interessati ad approfondire l’argomento, troverete altri articoli che trattano Python tramite dei video a questo link.

Spero di essere stato abbastanza chiaro nello spiegare l’argomento. A presto!

P.S.
Se notate qualche errore o imprecisione o sapete come migliorare le mie funzioni, non esitate a scrivermi commentando di seguito nell’apposito modulo a fine pagina oppure potere scrivermi privatamente dal modulo di contatto nella pagina Get In Touch e cercheremo di risolvere insieme il problema, ma non vi nascondo ovviamente che preferisco sempre condividere con le altre persone tutti i dibattiti in quanto si può imparare molto anche dagli errori altrui. Grazie!

esercizi sulla ricorsione - Fibonacci

Esercizi sulla ricorsione

[accordion id=”1″ problem=”Scrivere una funzione ricorsiva che, data una stringa s, restituisce vero se la stringa contiene solo coppie consecutive formate da una cifra numerica e un carattere alfabetico; falso altrimenti.
Nota: ricordare metodi isdigit() e isalpha() del di dato strutturato in python” solution=”https://gist.github.com/robertocapannelli/b6abcd4f3ccaed3c667f.js”]

[accordion id=”2″ problem=”Scrivere una funzione ricorsiva booleana che, data una stringa s, una stringa c di lunghezza 1, e un intero n, restituisce il valore vero se c è presente ALMENO n volte nella stringa s, falso altrimenti.” solution=”https://gist.github.com/robertocapannelli/79ff44ea83e609a7e66d.js”]

[accordion id=”3″ problem=”Scrivere una funzione ricorsiva che data un stringa s restituisca la stringa ottenuta da s eliminando le vocali.Ad esempio l’invocazione eliminaVocali(‘pippo’) deve restituire la stringa ‘ppp’.” solution=”https://gist.github.com/robertocapannelli/3b0b6b0e3ba5e7e6da70.js”]

[accordion id=”4″ problem=”Scrivere una funzione ricorsiva che, data una stringa s, restituisce come risultato una stringa ottenuta elimanando da s tutti i caratteri ripetuti consecutivamente, tranne il primo (Es.: se s = ‘aaabbcccc’ la funzione deve restituire ‘abc’; se s = ‘ababcc’ la funzione deve restituire ‘ababc’.” solution=”https://gist.github.com/robertocapannelli/27213c1f150186bd7011.js”]

[accordion id=”5″ problem=”Scrivere una funzione ricorsiva che data una lista di interi l restituisce la somma dei soli numeri pari.” solution=”https://gist.github.com/robertocapannelli/b4de46dc3901b643884d.js”]




[accordion id=”6″ problem=”Scrivere una funzione ricorsiva che, data una lista di numeri interi (positivi o negativi), restituisce come risultato il valore vero se la somma dei numeri contenuti nella lista è un valori pari, falso altrimenti. Se la lista è vuota, la funzione restituisce il valore vero.” solution=”https://gist.github.com/robertocapannelli/19f37c86c5ef73a19942.js”]

[accordion id=”7″ problem=”Scrivere un funzione ricorsiva che data una stringa s controlli se la lista divisa a metà abbia la prima parte uguale alla seconda, se la lista dovesse essere dispara l’ultimo elemento può essere trascurato. Es. s = s1 + s2 – s1 = s2″ solution=”https://gist.github.com/robertocapannelli/a7c19a0f3372649904fe.js”]

[accordion id=”8″ problem=”Scrivere una funzione ricorsiva che, dato una lista di interi l, restituisca una nuova lista di interi ottenuto da l sostituendo ogni numero negativo con 0. Ad esempio l’invocazione azzeraNegativi({1,-2, 3, 4, -5}), deve restituire l’array {1, 0, 3, 4, 0}.” solution=”https://gist.github.com/robertocapannelli/822439915d618d363879.js”]

[accordion id=”9″ problem=”Scrivere una funzione ricorsiva che data una stringa s, restituisca una stringa costituita dai caratteri di s invertiti. Ad esempio l’invocazione reverse(‘pippo’) deve restituire la stringa ‘oppip’.” solution=”https://gist.github.com/robertocapannelli/0a6a39bdb4184551f27c.js”]

[accordion id=”10″ problem=”Scrivere una funzione ricorsiva che data un stringa s, restituisca una stringa ottenuta da s sostituendo ogni spazio bianco con il carattere underscore (‘_’).
Ad esempio l’invocazione underscore(‘pippo e topolino’) deve restituire la stringa ‘pippo_e_topolino’.” solution=”https://gist.github.com/robertocapannelli/a8b85d52f7678c5d65f9.js”]




[accordion id=”11″ problem=”Si definisca una funzione ricorsiva che, data una lista di stringhe e una stringa x di un carattere, restituisce true se almeno una di queste stringhe contiene il carattere specificato da x, e false altrimenti.” solution=”https://gist.github.com/robertocapannelli/80fa0861fb4883a2fe63.js”]

[accordion id=”12″ problem=”Si definisca una funzione ricorsiva che, data una lista di interi l, e un valore intero x, verifica che la lista goda della seguente proprietà:
Nota: se la lista è di lunghezza dispari, il valore dell’elemento centrale è ininfluente.” solution=”https://gist.github.com/robertocapannelli/18a675479815151e1ca1.js”]

[accordion id=”13″ problem=”Si definisca una funzione ricorsiva che, data una lista L, un valore V e un intero k, restituisce true se il valore V è presente in tutte le posizioni della lista il cui indice è multiplo di k, e false altrimenti.” solution=”https://gist.github.com/robertocapannelli/e16c9d43630e6765be62.js”]

[accordion id=”14″ id=”14″ problem=”Scrivere una funzione ricorsiva che data una lista di interi restituisce la lista ordinata dall’elemento più piccolo a quello più grande.” solution=”https://gist.github.com/robertocapannelli/c6a28bd297ae745dae5e.js”]

[accordion id=”15″ problem=”Assegnato un vettore F di float di dimensione N, scrivere una funzione ricorsiva che calcoli il massimo valore tra la somma di ogni elemento con il successivo ( escluso l’ultimo )” solution=”https://gist.github.com/robertocapannelli/a57945f9b55d13484af9.js”]

[accordion id=”16″ problem=”Assegnata una stringa S ed un carattere c, scrivere una funzione ricorsiva che calcoli le occorrenze di c in S” solution=”https://gist.github.com/robertocapannelli/5cdc6f69410f6af3f6e0.js”]

[accordion id=”17″ problem=”Sia assegnato un vettore A di interi di dimensione N. Scrivere una funzione ricorsiva che calcoli il massimo valore degli elementi di A.” solution=”https://gist.github.com/robertocapannelli/6c3756324bc200894de8.js”]

[accordion id=”18″ problem=”Definire una funzione ricorsiva che data una stringa s resituisce vero se la stringa e composta dallo stesso numero di caratteri numerici e alfabetici falso altrimenti” solution=”https://gist.github.com/robertocapannelli/0e897078158d0234c5e1.js”]

[accordion id=”19″ problem=”Scrivere una funzione ricorsiva che, assegnati due interi N1 ed N2, restituisca la somma di tutti gli interi compresi tra N1 ed N2″ solution=”https://gist.github.com/robertocapannelli/01b2b753c6c7ed90a49d.js”]

[accordion id=”20″ problem=”Scrivere e una funzione ricorsiva che stampi il contenuto di una lista.” solution=”https://gist.github.com/robertocapannelli/dccd529d18974e88d6b3.js”]

[accordion id=”21″ problem=”Definire una funzione ricorsiva che data una stringa restituisca ogni elemento delle stringa diviso dagli altri da uno spazio. Es. ‘abcd’ diventa ‘a b c b’.” solution=”https://gist.github.com/robertocapannelli/846d3fc620ce4f998bd8.js”]