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
...

Note

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]

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.

Funzioni ricorsive reciproche

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)

Vedere anche

Riferimenti

Funzioni (F#)