Ci sono diversi “orrori” concettuali!
- y e' il nome della variabile usata all'interno della funzione e ritornata come risultato della funzione stessa.
- da nessuna parte c'e' scritto che y deve essere un vettore di 30 elementi. Nessuno lo crea. Se per un valore intero/float non e' un problema, i vettori vanno “allocati”
- g e' in iteratore, cioe' una variabile che vale 1,2,3,…30. Ok
- ma quando g e' uguale ad 1, nel tuo codice y(1)
DIPENDE da y(30) CHE NON E' STATO ANCORA CALCOLATO,
quindi COME FAI A CALCOLARLO ??? - quando g e' diverso da 1 e 9, y(g) DIPENDE DA y(g-1), ottimo, nessun problema perche' calcolato al passo precedente,
MA ANCHE DA y(g) STESSO.
MA SE LO STAI CALCOLANDO, COME FAI AD USARLO???
.
Mi sa che che non hai capito il concetto di “ricorsione”.
La tua funzione NON E' ricorsiva, ma e' implementata mediante un'ITERAZIONE/ciclo.
Inoltre, Per come e' scritta, al di la deglli “orrori”, la tua funzione NON E' “ricorsiva” MA “vettoriale”, cioe':
NON RITORNA un singolo scalare
MA
RITORNA un vettore.
La funzione non e' complessa, e' estremamente semplice, MA scritta cosi' NON PUO' FUNZIONARE.
Esempio di funzione ricorsiva (NON E' matlab, MA pseudocodice):
fact(n):
if n==0:
return 1
if n==1
return 1
else
return n*fact(n-1) <=== CHIAMATA RICORSIVA
Esempio di funzione iterativa (NON E' matlab, MA pseudocodice):
fact(n):
f = 1
for i=1 to n step 1: <=== CICLO
f = f*i
return f