两种简单算法展示递归思想

171 阅读1分钟

请写一个 min 函数,要求 min(numbers) 能返回数组 numbers 中的最小数字。

下面以数组[12,5,8,7,9,0,2]为例

let min = (numbers) => {
  if (numbers.length > 2) {
    return min([numbers[0], min(numbers.slice(1))]);
  } else {
    return Math.min.apply(null, numbers);
  }
};
console.log(min([12, 5, 8, 7, 9, 0, 2]));

请写出一个 sort 函数,要求 sort(numbers) 能返回一个把 numbers 从小到大排列的数组(你可以添加多余的帮助函数)

下面以数组[12,5,8,7,9,0,2]为例

let minIndex = (numbers) => numbers.indexOf(min(numbers));
let min = (numbers) => {
  if (numbers.length > 2) {
    return min([numbers[0], min(numbers.slice(1))]);
  } else {
    return Math.min.apply(null, numbers);
  }
};
let sort = (numbers) => {
  if (numbers.length > 2) {
    let index = minIndex(numbers);
    let min = numbers[index];
    numbers.splice(index, 1);
    return [min].concat(sort(numbers));
  } else {
    return numbers[0] < numbers[1] ? numbers : numbers.reverse();
  }
};
console.log(sort([12, 5, 8, 7, 9, 0, 2]));