探索编程的深度,挑战思维的边界。翻转卡片查看问题,思考解决方案,然后查看我们的分析。
考虑以下递归函数:
function mystery(n) {
if (n <= 1) return 1;
return n * mystery(n - 1);
}
当调用 mystery(5) 时,返回值是多少?
这是一个经典的阶乘函数实现。
递归过程:
因此,mystery(5) = 5 * 4 * 3 * 2 * 1 = 120
时间复杂度:O(n)
以下代码的输出是什么?
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 100);
}
如何修改代码使其输出 0,1,2,3,4?
输出是五个 5,而不是预期的 0 到 4。
原因:
解决方案:
// 使用 let
for (let i = 0; i < 5; i++) {
setTimeout(() => console.log(i), 100);
}
实现一个函数,判断一个数是否为质数:
function isPrime(n) {
// 你的实现
}
要求:
优化思路:
优化实现:
function isPrime(n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 === 0 || n % 3 === 0) return false;
for (let i = 5; i * i <= n; i += 6) {
if (n % i === 0 || n % (i + 2) === 0)
return false;
}
return true;
}
时间复杂度:O(√n)