熟悉一下什么是递归


// 一个简单的阶乘函数  
var f = function (x) {  
    if (x === 1) {  
        return 1;  
    } else {  
        return x * f(x - 1);  
    }  
}
var b = f(4)
// 执行过程
// 4*f(3)     4*3*f(2)     4*3*2*f(1)
console.log(b)

递归排序也就是:快排

(1)从数列中取出一个数作为参考,分区过程。
(2)将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
(3)对左右区间重复第二步,直到各区间只有一个数。(停止递归的条件)

var arr1 = [4, 8, 9, 5, 78, 0, 99];
function digui(arr) {
  if (Array.isArray(arr)) {
    if (arr.length <= 1) {
      return arr;
    }
    let minddleindex = Math.floor(arr.length / 2);
    //下面这一步很关键
    let middle = arr.splice(minddleindex,1);
    let left = [];
    let right = [];
    arr.forEach( item => {
        if(item > middle) {
            right.push(item);
        }else {
            left.push(item);
        }
    });
    return digui(left).concat(middle, digui(right));
  } else {
    return;
  }
}

console.log(digui(arr1))  
//[0,  4,  5, 8,9, 78, 99]