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 die Variable nicht 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 speziell ein Closure, weil ich externe Variablen erfassen möchte.
Könnt ihr mir sagen, wie
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs
Testen in PHP: Unit, Integration, E2E – das vollständige Handbuch