我试图在Lisp中实现幼稚的阶乘计算。
(defun factorial (n) (if (equal n 1) 1 (* n (factorial (- n 1))) ) )
该代码适用于小数(<10),正如人们所期望的那样。但是,令我惊讶的是,它也适用于更高的数字(例如1000),并且几乎可以立即计算出结果。
另一方面,在C ++中,以下代码为factorial(1000)
检索0。
long long unsigned factorial(int n) { if(n == 1) return 1; return n * factorial(n-1); }
为什么Lisp中的计算如此之快,并且数字如何存储在内存中?
我已经尝试过在Lisp中天真计算阶乘。 (defun factorial(n)(if(等于n 1)1(* n(阶数(-n 1)))))该代码适用于小数(<10),因为...
Common Lisp(理论上)对整数不加任何限制(例如Python)。整数的存储会根据需要自动分配以表示大整数。另一方面,C ++本机整数(例如int类型)存储在固定大小的内存中。在当今大多数平台上,大小通常在1到8个字节之间。