====== Esercitazione funzioni ====== ===== Esercizio 1: funzione fattoriale (iterativa e ricorsiva) ===== Scrivere una funzione C che calcola il fattoriale di un intero ''n'' e ne restituisce il risultato. Implementare la funzione in modo iterativo e ricorsivo. Quando il programma e` corretto e funzionante sperimentare cosa succede su numeri grandi. Provare per n = 10000 n = 100000 n = 1000000 Usare il comando ''time'' per misurare il tempo impiegato per il calcolo dalle due versioni. Per evitare di misurare il tempo di attesa del valore da calcolare, assegnate direttamente il valore nel codice senza usare la lettura da standard input o le stampe a schermo, ad esempio: int main (void) { int n=1000000; fattoriale(n); return 0; } Che risultati ci sono ? Come ve li spiegate ? Se non vedete risultati apprezzabili con la time() potete usare la funzione di libreria standard C clock man 3 clock direttamente nel codice ===== Esercizio 2: Inversione di una stringa (iterativa e ricorsiva) ===== Riprendendo l'esempio visto a lezione, scrivete una funzione iterativa ed una ricorsiva di prototipo void invert (void); che legge una sequenza di caratteri (stringa) terminata da ''\n'' da standard input e la stampa rovesciata su standard output. ===== Esercizio 3: Numeri di Catalan ===== I numeri di Catalan sono una sequenza di interi utilizzati diverse aree della fisica, l'esercizio richiede di realizzare una funzione int catalan_n (int n) che dato ''n'' calcola (e restituisce) l'n-esimo numero delle sequenza in base alla definizione induttiva fornita {{:fisica:informatica:201415:esercitazioni:numericatalan.pdf|qua}}. ===== Esercizio 4: Verifica (ricorsiva) di proprieta' ===== Scrivere una funzione ricorsiva che legga da standard input una sequenza di valori interi positivi terminata dal valore 0 (che non fa parte della sequenza) e che verifichi la seguente proprietà: ogni valore letto è doppio del valore precedente, ad esempio la sequenza 2 4 8 16 32 0 verifica la proprietà. La funzione deve restituire 1 se la proprietà è verificata e 0 altrimenti e non può utilizzare gli array. ===== Esercizio 5: La torre di Hanoi ===== Implementare una funzione ricorsiva ''hanoi(n,A,C,B)'' che stampa sullo standard output tutti gli spostamenti necessari per risolvere la Torre di Hanoi con ''n'' dischi come visto a lezione. Sviluppare un main che chiede all'utente di inserire ''n'' da standard input e stampa le mosse necessarie sullo standard output. ===== Esercizio 6: Verifica di proprietà 2 ===== Scrivere una funzione (ricorsiva) che ha un solo parametro intero ''n''. La funzione legge una sequenza di interi positivi (terminata da 0) da standard input $a_1 \ldots a_k$ di lunghezza $k$ dispari non nota a priori. La funzione restituisce un intero (0 come FALSE e 1 come TRUE) dopo aver verificato la seguente proprietà * al centro e solo al centro è presente il valore ''n'', * la somma di tutte le coppie simmetriche sia pari a $n$, cioè $a_i + a_{k−(i−1)} = n $. Ad esempio, se ''n'' e’ ''10'' e la sequenza e’ 2 6 5 10 5 4 8 la funzione deve restituire 1. Non si possono usare gli array.