fn fact_tail(n: Int, a: Int) -> Int {
if n <= 0 {
return move(a);
}
return fact_tail(n - 1, a * n);
}
fn fact(n: Int) -> Int {
return fact_tail(move(n), 1);
}
fn e(iters: Int) -> Float {
let i = 0;
let res = 0.0;
while i < iters {
res = res + 1.0 / fact(*i);
i := i + 1;
}
return *res;
}
let constant_e = e(10);
if abs(constant_e - 2.7182) > 0.001 {
panic("This is wrong...");
}