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