Kann man ein rekursives Closure in Rust erstellen?
Hallo zusammen! Ich lerne Rust und versuche, ein rekursives Closure zur Berechnung der Fakultät zu schreiben. Hier ist mein Code:
```rust
let factorial = |n: u32| -> u32 {
if n <= 1 {
1
} else {
n * factorial(n - 1) // Fehler: cannot capture `factorial` in its own initializer
}
};
```
Der Compiler gibt einen Fehler aus: "cannot capture `factorial` in its own initializer". Ich verstehe, dass das Closure keine Variable erfassen kann, die noch nicht vollständig initialisiert ist. Aber wie erstellt man dann ein rekursives Closure?
Ich habe versucht, `factorial` als `let factorial: Box u32>` zu deklarieren, aber das hat nicht geholfen. Ich weiß, dass man eine normale Funktion `fn factorial(n: u32) -> u32` verwenden kann, aber ich brauche genau ein Closure, weil ich externe Variablen erfassen möchte.
Könnt ihr mir sagen, wie