C14 #7 Do While – Break Funzioni ricorsive Piero Scotto - C14 1 Finalità del corso Finalità del corso Finalità del corso Finalità del corso Finalità del corso Piero Scotto - C14 2 Piero Scotto - C14 3 Piero Scotto - C14 4 Piero Scotto - C14 5 Piero Scotto - C14 6 Piero Scotto - C14 7 Piero Scotto - C14 8 Piero Scotto - C14 9 Piero Scotto - C14 10 Piero Scotto - C14 11 Piero Scotto - C14 12 Piero Scotto - C14 13 Piero Scotto - C14 14 Piero Scotto - C14 15 Piero Scotto - C14 16 Piero Scotto - C14 17 7OL Esercizio N° 19 Olimpiadi 2010– La risposta vale 3 punti. Si consideri il seguente frammento di programma: int succ(int i) { if (i<=2) return(1); else return(3*succ(i-1)+2*succ(i-2)-succ(i-3)); } main() { printf("num=%d\n",succ(7)); } Cosa viene visualizzato a video dall’esecuzione di main()? Piero Scotto - C14 18 int succ(int i) { if (i<=2) return(1); else return(3*succ(i-1)+2*succ(i-2)-succ(i-3)); } main() { printf("num=%d\n",succ(7)); } La funzione succ è ricorsiva perché richiama se stessa. Per capirne il funzionamento possiamo inserire il numero 7 (che rappresenta i) Piero Scotto - C14 19 int succ(int i) { if (i<=2) return(1); else return(3*succ(i-1)+2*succ(i-2)-succ(i-3)); } se i=7 (3*succ(6)+2*succ(5)-succ(4)) Ora ciascuna succ(n) richiama se stessa: succ(6)=3*succ(5)+2*succ(4)-succ(3) succ(5)=3*succ(4)+2*succ(3)-succ(2) con succ(2)=1 succ(4)=3*succ(3)+2*succ(2)-succ(1) con succ(1)=1 succ(3)=3*succ(2)+2*succ(1)-succ(0) con succ(0)=1 succ(3)=3*1+2*1-1=4 da cui si calcolano le altre Piero Scotto - C14 20