Rust में रिकर्सन कैसे लागू करें?
सभी को नमस्ते! मैं Rust में फैक्टोरियल की गणना के लिए एक recursive function लागू करने का प्रयास कर रहा हूँ, लेकिन एक अप्रत्याशित समस्या का सामना करना पड़ा। मैंने सरल कोड लिखा:
fn factorial(n: u32) -> u32 {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}
fn main() {
println!("{}", factorial(5));
}कोड compile होता है और काम करता है, लेकिन recursion की गहराई बढ़ाने पर (जैसे, factorial(20000)) प्रोग्राम stack overflow के साथ क्रैश हो जाता है। मुझे पता है कि Rust में tail recursion optimization नहीं है, और यह अपेक्षित है। हालांकि, मैं समझना चाहता हूँ कि Rust में recursion को सही तरीके से कैसे लागू किया जाए जब गहराई बड़ी हो सकती है।
मैंने पहले से क्या प्रयास किया:
- लूप के साथ iterative approach का उपयोग किया (काम करता है, लेकिन मैं विशेष रूप से recursion चाहता हूँ)
- accumulator के साथ tail recursion लिखने का प्रयास किया:
fn factorial_tail(n: u32, acc: u32) -> u32 {
if n == 0 {
acc
} else {
factorial_tail(n - 1, n * acc)
}
}