如何使用递归函数找到数组中的最小元素?
因此arr=[-2,5,3,0]
将返回-2
?
function recur(){
if (){
}
else {
return .. recur(arr[0])
}
}
我完全迷失了......
编辑:我需要使用递归,而不是循环等。
答案 0 :(得分:1)
没有必要使用递归来找到这样一个简单数组的最小值。
只需使用Math.min
函数:
var arr = [-2,5,3,0],
smallest = Math.min.apply(null, arr);
console.log(smallest); // -2
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min
答案 1 :(得分:1)
这是一个递归提议,每次调用时都会将数组减少一个。
function min(a) {
return a.length === 1 ? a[0]: min(a.slice(2).concat(a[0] < a[1] ? a[0] : a[1]));
}
console.log(min([-2, 5, 3, 0]));
console.log(min([-2,-3,-4,-5,-6,-7,-8]));
&#13;
使用spread operator进行ES6尝试。
function min(array) {
function m (a, ...r) {
if (!r.length) return a;
if (a < r[0]) r[0] = a;
return m(...r);
}
return m(...array);
}
console.log(min([-2, 5, 3, 0]));
console.log(min([-2,-3,-4,-5,-6,-7,-8]));
&#13;
答案 2 :(得分:1)
library(dplyr)
df <-
df %>%
mutate(
B = lead(A) - A,
is_zero = (A == 0) | (lead(A) == 0)
)
答案 3 :(得分:0)
这种元素
ar.sort(function(a, b){return a-b});
采取数组的第一个元素
答案 4 :(得分:0)
通常您会使用Math.min
或Array.reduce
来计算数组的最小元素。但是,如果您对学习递归感兴趣,可以采用以下解决方案:
const min = ([head, ...tail]) => tail.length <= 0
? head // base case
: min(head < tail[0] ? [head, ...tail.slice(1)] : tail); // recursive case
let xs = [-2,5,3,0];
min(xs); // -2
<强>解释强>: 传递的数组由一个模式解构,该模式查找其头部和尾部。在每个递归步骤中,算法比较尾部的头部和第一个元素并拒绝较大的尾部。因此,递归过程会在每次递归时减少给定的数组。到达基本案例时递归结束。基本情况要求尾部是空的。
请注意,递归函数调用处于尾部位置(后面没有其他表达式/语句)。这意味着,符合ES6标准的Javascript引擎可以优化这些调用,因此递归与循环的必要性一样快。
答案 5 :(得分:0)
我给你一个递归版本功能。我要做的一些小笔记:
... || smallest === undefined
放在那里。它在那里,所以最初设置的最小值。但同样,这种方式执行时间最短。arr.shift()
删除数组的第一个元素并将其返回。所以这是代码和fiddle
function recur(arr, smallest){
if (arr.length === 0){
return smallest;
}
else {
var first = arr.shift();
if (first < smallest || smallest === undefined){
smallest = first;
}
return recur(arr, smallest);
}
}