使用递归函数查找数组中的最小元素

时间:2016-05-27 20:12:53

标签: javascript recursion

如何使用递归函数找到数组中的最小元素? 因此arr=[-2,5,3,0]将返回-2

function recur(){
   if (){
   }
   else {
     return .. recur(arr[0])
   }
}

我完全迷失了......

编辑:我需要使用递归,而不是循环等。

6 个答案:

答案 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;
&#13;
&#13;

使用spread operator进行ES6尝试。

&#13;
&#13;
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;
&#13;
&#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.minArray.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);
    }
}
相关问题