Factorial
n! is the product 1 × 2 × … × n, with 0! defined as 1.
先从这个心智模型开始
n! is the product 1 × 2 × … × n, with 0! defined as 1.
它如何工作,不堆砌不必要的术语
It appears in permutations, combinations and probability formulas.
An iterative implementation avoids recursion overhead; large n quickly exceeds JavaScript Number precision.
把算法读成一连串决策
State the mathematical identity/property.
Choose numeric representation and constraints.
Translate the property into an iterative/recursive computation and analyze precision.
Read a tiny input by hand and write down the state after every important operation. For Factorial, the goal is to make the invariant visible rather than to memorize code.
function factorial(n) {
if (!Number.isInteger(n) || n < 0) throw new Error("n must be a non-negative integer");
let result = 1;
for (let i = 2; i <= n; i++) result *= i;
return result;
}不要死记语法。跟踪每一行中发生变化的状态,并把它与上面描述的不变量联系起来。
O(n)
Do not quote this complexity mechanically. Ask which operation or input dimension it describes, then derive the cost from the loops, recursion depth, data-structure operations and any preprocessing assumptions.
适用场景
- Use the direct mathematical property when it removes unnecessary brute force.
通常哪里会出错
- Ignoring floating-point precision or integer range.
- Using a formula outside its valid assumptions.
专业回答结构
State the base case and complexity O(n). If constraints are large, mention overflow/precision rather than treating numeric range as unlimited.
What problem does Factorial solve?
n! is the product 1 × 2 × … × n, with 0! defined as 1.
关于复杂度应该提到什么?
Its typical cost here is O(n), but a complete answer should connect that cost to the representation, input constraints and the dominant operations.
最常见的错误是什么?
Ignoring floating-point precision or integer range.