【发布时间】:2021-12-23 08:39:18
【问题描述】:
我有一个任务,我需要使用 递归函数 找到数组中的最小数字。需要明确的是:我已经获得了一个可行的解决方案。我只是一辈子都想不通为什么我自己的算法不起作用。
function minimum(ns) {
if (ns.length === 1) {
return ns[0];
}
else {
const first = ns[0]
const second = ns[1]
if (first >= second) {
return minimum(ns.slice(1))
}
else {
return minimum(ns.splice(1,1))
}
}
}
minimum([0, 1]
此代码返回 1 而不是零...我的想法如下:
- 首先检查列表长度是否为1,如果是则返回其中唯一的元素
- 如果不是:将列表中的第一个元素与第二个元素进行比较,最大的元素将被删除。新列表再次放入函数中以使其递归。
- 此过程一直持续到列表实际长度为 1,然后该函数将返回最小的数字。
为什么返回 1 而不是 0?
希望有人可以提供帮助 亲切的问候!
【问题讨论】:
-
Array.prototype.splice返回删除的元素,而不是原始数组。此外,它还会改变数组。 -
function minimum(ns) { console.log(ns.join(','));简单调试...你看到你用什么来调用最小值?所以下一步,了解 splice 返回的内容。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
标签: javascript arrays recursion minimum