Czy możliwe jest utworzenie rekurencyjnego zamknięcia w Rust?

Jest to bardzo prosty przykład, ale jak zrobić coś podobnego do:

let fact = |x: u32| {
    match x {
        0 => 1,
        _ => x * fact(x - 1),
    }
};

Wiem, że ten konkretny przykład można łatwo zrobić z iteracją, ale zastanawiam się, czy jest możliwe utworzenie funkcji rekurencyjnej w Rust dla bardziej skomplikowanych rzeczy (takich jak przechodzenie przez drzewa) lub czy muszę zamiast tego użyć własnego stosu .

questionAnswers(1)

yourAnswerToTheQuestion