So che questo non è ciò che le funzioni anonime sono fatte per, ma proprio come un puzzle ho provato a fare una funzione ricorsiva tramite funzioni anonime. Il prototipo delle funzioni ricorsive è ovviamente la funzione fattoriale. Il problema è che è difficile distinguere il caso all'interno delle funzioni anonime entro. Quello che sono riuscito a fare finora è la seguente:Funzione anonima ricorsiva Matlab
[email protected](cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;ans=cn;end');
[email protected](n)f(1,n,f);
O in alternativa:
[email protected](cn,n,f)eval('if n>1; f(cn*n,n-1,f);else;disp(cn);end');
[email protected](n)f(1,n,f);
Ciò che non è molto soddisfacente è che ancora non è possibile utilizzare questa funzione quando si assegna direttamente, a=f(3)
produce ancora un errore, dal eval
non si ottiene un valore.
Quindi la mia domanda è: puoi effettivamente eseguire una funzione ricorsiva tramite funzioni anonime che, ad es. calcola fattoriale in un modo che consente ad es. a=f(3)
affidandosi solo a funzioni matlab native (o funzioni che è possibile creare nella riga di comando, come ho fatto nel mio esempio)?
PS: So che questo non ha alcun uso pratico, è solo una sfida su quanto si può piegare e abusare della sintassi di Matlab.
Intendi funzione anonima? La maniglia della funzione sembra essere una classe di oggetti più ampia per me. Ma non sono un esperto, quindi lo sto davvero chiedendo. –
@AndrasDeak Certo che sì, grazie per averlo sottolineato! – flawr
Nessun accesso Matlab al momento, ma hai provato a fare qualcosa di simile a questo '' if n> 1; f (CN * n, n-1, f); altro; cn; FINE'? – patrik