为什么在Lisp中如此快速地计算1000阶乘(并显示正确的结果?)>

问题描述 投票:0回答:1

我试图在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),因为...

performance lisp common-lisp factorial
1个回答
0
投票

Common Lisp(理论上)对整数不加任何限制(例如Python)。整数的存储会根据需要自动分配以表示大整数。另一方面,C ++本机整数(例如int类型)存储在固定大小的内存中。在当今大多数平台上,大小通常在1到8个字节之间。

© www.soinside.com 2019 - 2024. All rights reserved.