كيفية تنفيذ recursion في Rust؟
مرحباً بالجميع! أحاول تنفيذ دالة recursion لحساب factorial في Rust، لكنني واجهت مشكلة غير متوقعة. كتبت كوداً بسيطاً:
fn factorial(n: u32) -> u32 {
if n == 0 {
1
} else {
n * factorial(n - 1)
}
}
fn main() {
println!("{}", factorial(5));
}الكود يتم ترجمته ويعمل، لكن عند محاولة زيادة عمق recursion (مثل factorial(20000)) يتعطل البرنامج مع stack overflow. أعلم أن Rust لا يحتوي على tail call optimization، وهذا متوقع. لكني أريد فهم كيفية تنفيذ recursion بشكل صحيح في Rust عندما يكون العمق كبيراً.
ما جربته بالفعل:
- استخدام نهج iterativ مع loop (يعمل، لكني أريد recursion تحديداً)
- حاولت كتابة tail recursion مع accumulator:
fn factorial_tail(n: u32, acc: u32) -> u32 {
if n == 0 {
acc
} else {
factorial_tail(n - 1, n * acc)
}
}