Chamamos de recursão a capacidade de algo ser definido em termos de si mesmo. Em F#, a recursão aparece com mais frequência em funções recursivas, ou seja, funções que chamam a si mesmas.
Uma função recursiva precisa ter pelo menos um caso base e pelo menos um caso recursivo. Um caso base retorna um valor sem chamar a função de novo. Um caso recursivo chama a função de novo, modificando a entrada para que, em algum momento, ela corresponda ao caso base.
Funções recursivas são definidas como funções normais, mas com o modificador rec. Sem esse modificador, uma função não consegue chamar a si mesma, e qualquer tentativa de fazer isso resulta em um erro de compilação. Por isso, a recursão precisa ser habilitada explicitamente.
let rec factorial x =
// Base case
if x = 1 then
1
// Recursive case
else
x * factorial (x - 1)
O F# também dá suporte a tipos recursivos por meio de uniões discriminadas. Em uma união discriminada recursiva, um ou mais casos fazem referência à própria união discriminada nos seus dados. Assim como as funções recursivas, os tipos recursivos precisam ter um caso base. Diferentemente das funções recursivas, os tipos recursivos não usam a palavra-chave rec.
type RussianDoll =
| Doll // Base case
| Layer of RussianDoll // Recursive case
Neste exercício, você trabalha em uma pizzaria que faz entregas para os clientes.
Você oferece três tipos de pizza:
Os clientes também podem escolher duas opções adicionais por uma pequena taxa extra:
Quando os clientes fazem um pedido, uma taxa adicional é cobrada se eles pedirem apenas uma ou duas pizzas:
Você tem três tarefas, e cada uma delas trabalha com pizzas e seus preços.
Defina a união discriminada Pizza para representar os tipos de pizza e as duas opções adicionais que podem ser adicionadas a uma pizza:
MargheritaCapreseFormaggioExtraSauceExtraToppingsImplemente a função pizzaPrice para calcular o preço de uma pizza:
pizzaPrice Caprese
// => 9
Implemente a função orderPrice para calcular o preço de um pedido de pizza:
orderPrice [Margherita; Formaggio]
// => 19
Crie sua conta no Exercism para aprender e dominar F# com 18 conceitos148 exercícios e mentoria humana de verdade, tudo de graça.