Avatar ·

É possível criar um closure recursivo em Rust?

Olá a todos! Estou aprendendo Rust e tentando escrever um closure recursivo para calcular o fatorial. Aqui está meu código: ```rust let factorial = |n: u32| -> u32 { if n <= 1 { 1 } else { n * factorial(n - 1) // erro: cannot capture `factorial` in its own initializer } }; ``` O compilador dá o erro: "cannot capture `factorial` in its own initializer". Entendo que o closure não pode capturar uma variável que ainda não foi totalmente inicializada. Mas como então fazer um closure recursivo? Tentei declarar `factorial` como `let factorial: Box u32>`, mas não ajudou. Sei que posso usar uma função normal `fn factorial(n: u32) -> u32`, mas preciso especificamente de um closure, porque quero capturar variáveis externas. Diga-me como organizar corretamente a recursão em um closure? De preferência com um exemplo de código que funcione. Desde já agradeço! <<>>

O problema dos closures recursivos em Rust

De fato, diretamente