linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_14-08-26.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_14-08-26.png differ
linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_14-14-25.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_14-14-25.png differ
linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_14-56-59.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_14-56-59.png differ
linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-02-00.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-02-00.png differ
linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-10-03.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-10-03.png differ
linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-23-46.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-23-46.png differ
linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-31-11.png
... ...
Binary files /dev/null and b/linguaggi/s02/assets/imgs/sottoprogrammi_ed_eccezioni_2026-03-10_15-31-11.png differ
linguaggi/s02/controllo.md
... ...
@@ -0,0 +1,123 @@
1
+# Controllo
2
+
3
+# Controllo
4
+
5
+## Ricorsione
6
+
7
+Metodo alternativo all'iterazione.
8
+Una funz (procedura) e' ricorsiva se e'definita in termini di se stessa.
9
+
10
+```c
11
+int fatt (int n){
12
+ if (n<=1)
13
+ return 1;
14
+ else
15
+ return n* fatt(n-1);
16
+}
17
+```
18
+
19
+la definizione di una funzione ricorsiva e' analoga alla definizione induttiva di una funzione:
20
+
21
+- il valore F su un argomento e'definito in termini dei valori di F su argomenti piccoli.
22
+
23
+Nei programmi sono possibili definizioni non "corrette":
24
+
25
+```c
26
+int fie1(int n){
27
+ if (n==1) return fie1(1);
28
+}
29
+```
30
+
31
+ovvero `fie(1) = fie(1)`
32
+
33
+Nota: la ric e' possibile in qualisiasi ling che permetta:
34
+
35
+- funz (o procedure) che possono chiamare se stesse
36
+- gestione dinamica della mem (pila)
37
+
38
+### Ricorsione in coda
39
+
40
+Una chiamata di `g` in `f` si dice _chiamata in coda_ (o tail call) se `f` restituisce il val restituito da g senza ulteriore computazione.
41
+Quindi `f` e'tail recursive se contiene solo chiamate in coda:
42
+
43
+```
44
+function tail_rec (n: integer): integer
45
+begin … ; x:= tail_rec(n-1) end
46
+```
47
+
48
+Non ric in coda:
49
+
50
+```
51
+function non_tail_rec (n: integer): integer
52
+begin … ; x:= non_tail_rec(n-1); y:= g(x) end
53
+```
54
+
55
+> Nota:
56
+>
57
+> 1. **non server allocazione dinamica della mem con pila**: basta un unico RdA
58
+> 2. Piu' efficiente
59
+> 3. Possibile la generazione di codice tail-recursive usando continuation passing style
60
+
61
+##### Es. Caso del fattoriale
62
+
63
+Converto la seguente funz ric in funz ric in coda:
64
+
65
+```c
66
+int fatt(int n){
67
+ if (n<=1) return 1;
68
+ else return n* fattrc(n-1,n*res);
69
+}
70
+```
71
+
72
+Sol:
73
+
74
+```c
75
+int fattrc(int n, int res){
76
+ if (n<=1) return res;
77
+ else return fattrc(n-1,n*res);
78
+}
79
+```
80
+
81
+##### Altro es:
82
+
83
+Numeri di fibonacci
84
+Definzione induttiva:
85
+
86
+- fib(0) = 0
87
+- fib(1) = 1
88
+- fib(n) = fib(n-1) + fib(n-2)
89
+
90
+Versione con ric non in coda
91
+
92
+```c
93
+int fib(int n){
94
+ if (n==0)
95
+ return 1;
96
+ else
97
+ if(n==1)
98
+ return 1;
99
+ else
100
+ return fib(n-1) + fib(n-2);
101
+}
102
+```
103
+
104
+Complessita' lineare in tempo e spazio (O(n))
105
+
106
+Versione ric in coda:
107
+
108
+```c
109
+int fibrc(int n, int res1, int res2){
110
+ if (n==0)
111
+ return res2;
112
+ else
113
+ if(n==1)
114
+ return res2;
115
+ else
116
+ return fibrc(n-1,res2,res1+res2);
117
+}
118
+```
119
+
120
+Complessita':
121
+
122
+- in tempo lineare in n
123
+- in spazio costante (un solo RdA)