19 Sep
2024
19 Sep
'24
4:08 p.m.
If I use $x * $factorial($x - 1)
True, it should have been multiplication; thanks. I get an out-of-range error as of $factorial(21).
Integers in BaseX are limited to 64bit (that’s something the spec allows). You can use decimals to work with greater numbers: declare variable $factorial := fn($x) { if($x > 1) then $x * $factorial($x - 1) else $x }; $factorial(1000.0) If you need even larger results, you can use a tail-call-optimized variant… declare variable $factorial := fn($x, $result) { if($x > 1) then $factorial($x - 1, $x * $result) else $result }; $factorial(100000.0, 1) …or fold-left: fold-left(1 to 100000, 1.0, op('*')) Hope this helps, Christian