Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

Funzioni ricorsive: parola chiave rec (F#)

La parola chiave rec viene utilizzata insieme alla parola chiave let per definire una funzione ricorsiva.

// Recursive function:
let rec function-name parameter-list = 
   function-body

// Mutually recursive functions:
let rec function1-name parameter-list =
   function1-body
and function2-name parameter-list =
   function2-body
...

Le funzioni ricorsive, ovvero funzioni che chiamano se stesse, sono identificate in modo esplicito nel linguaggio F#. In questo modo, l'identificatore definito viene reso disponibile nell'ambito della funzione.

Nel codice seguente viene illustrata una funzione che consente di calcolare l'ennesimo numero di Fibonacci.


let rec fib n =
   if n <= 2 then 1
   else fib (n - 1) + fib (n - 2)


Nota Nota

In pratica, il codice come quello illustrato in precedenza comporta un utilizzo eccessivo di memoria e tempo del processore in quanto rende necessario calcolare di nuovo valori calcolati in precedenza.

I metodi sono implicitamente ricorsivi all'interno del tipo; non è necessario aggiungere la parola chiave rec. Le associazioni let all'interno di classi non sono implicitamente ricorsive.

Talvolta le funzioni sono ricorsive reciproche, ovvero le chiamate formano un cerchio, dove una funzione ne chiama un'altra che a sua volta chiama la prima, con un numero qualsiasi di chiamate tra la prima e l'ultima. È necessario definire tali funzioni insieme in un'associazione let, utilizzando la parola chiave and per collegarle.

Nell'esempio seguente vengono illustrate due funzioni ricorsive reciproche.


let rec Even x =
   if x = 0 then true
   else Odd (x - 1)
and Odd x =
   if x = 1 then true
   else Even (x - 1)


Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft