Programmazione Funzionale - Esercizi sulle funzioni ricorsive
Transcript
Programmazione Funzionale - Esercizi sulle funzioni ricorsive
Programmazione Funzionale Esercizi sulle funzioni ricorsive - 2 Davide Mottin - Themis Palpanas March 26, 2014 1/12 Esercizi ricorsione Piramide di numeri Tabelline Il coefficiente binomiale Sommario 2/12 Piramide di numeri Costruire una funzione che, preso in input n, restituisca una piramide di numeri alta n. Per esempio se n=3, il risultato sarà 1 1 2 1 2 3 Esercizi ricorsione 3/12 Piramide di numeri - Soluzione l e t rec pyramid n = l e t r e c aux m = i f m = 0 then ”” else ( aux (m − 1 ) ) ˆ ” ” ˆ ( s t r i n g o f i n t m) in i f n = 0 then ”” e l s e ( p y r a m i d ( n − 1 ) ) ˆ ”\n” ˆ ( aux n ) ; ; E se volessimo stamparla al contrario??? Esercizi ricorsione 4/12 Piramide di numeri - Soluzione opposta l e t rec pyramid n = l e t r e c aux m = i f m = 0 then ”” else ( aux (m − 1 ) ) ˆ ” ” ˆ ( s t r i n g o f i n t m) in i f n = 0 then ”” e l s e ( aux n ) ˆ ” \n” ˆ ( p y r a m i d ( n − 1 ) ) ; ; Esercizi ricorsione 5/12 Le tabelline Costruire una funzione tab 2:int -> string che preso in input un intero n produca come output la stringa che rappresenta i primi n numeri della tabellina del 2. Se n < 0 restituire un’eccezione. Esempio tab_2 4;; - : string = " 2 4 6 8" Esercizi ricorsione 6/12 Le tabelline - Soluzione exception NegativeExc ; ; l e t rec tab 2 n = i f n < 0 then r a i s e NegativeExc e l s e i f n = 0 then ”” else ( t a b 2 ( n −1))ˆ ” ” ˆ ( s t r i n g o f i n t ( n ∗ 2 ) ) ; ; E se volessimo restituire una tabellina arbitraria? Esercizi ricorsione 7/12 Le tabelline Costruire una funzione tab: int -> int -> string che preso in input due interi k e n produca come output la stringa che rappresenta i primi n numeri della tabellina del k. Se n < 0 restituire un’eccezione. Esempio tab 3 10; - : string = " 3 6 9 12 15 18 21 24 27 30" Esercizi ricorsione 8/12 Le tabelline - Soluzione exception NegativeExc ; ; l e t rec tab k n = i f n < 0 then r a i s e NegativeExc e l s e i f n = 0 then ”” else ( t a b k ( n −1))ˆ ” ” ˆ ( s t r i n g o f i n t ( n∗ k ) ) ; ; Esercizi ricorsione 9/12 Il coefficiente binomiale Costruire UNA (e solo una) funzione binom:int->int->int che presi in input due interi, n e k, calcoli il coefficiente binomiale n! n = k k!(n − k)! Esercizi ricorsione 10/12 Il coefficiente binomiale Costruire UNA (e solo una) funzione binom:int->int->int che presi in input due interi, n e k, calcoli il coefficiente binomiale n! n = k k!(n − k)! Suggerimento Definire la funzione che calcola il fattoriale attraverso una dichiarazione locale Esercizi ricorsione 10/12 Il coefficiente binomiale - Soluzione l e t binom n k = l e t rec f n = i f n<=0 t h e n 1 e l s e n ∗ ( f ( n −1)) in ( f n ) / ( ( f k ) ∗ ( f ( n−k ) ) ) ; ; Esercizi ricorsione 11/12 Una funzione apply Supponi ti venga data questa funzione all’esame, prova a capire cosa fa e inferisci il suo tipo. let apply t f n = l e t r e c aux k = i f k=0 t h e n f n 0 e l s e t ( f n k ) ( aux ( k −1)) i n aux n ; ; Esercizi ricorsione 12/12