请写一个 min 函数,要求 min(numbers) 能返回数组 numbers 中的最小数字。
let min = (numbers)=>{
console.log(numbers)
if(numbers.length>2){
return min(
[numbers[0],min(numbers.slice(1))]
)
}else{
return Math.min.apply(null,numbers)
}
}
let num = min([1,2,3,4])
console.log(num)
//递归思路理解
运行min([1,2,3,4])
1 min([1,min([2,3,4])) #1层
2 min([1,min([2,min([3,4])]))#2层
3 min([1,min([2,3--reutrn Math.min.apply(null,[3,4])])触发else
return 3
4 min([1,2--reutrn Math.min.apply(null,[2,3]))触发else #2层
return 2
5 reutrn Math.min.apply(null,[1,2])触发else #1层
return 1
请写出一个 sort 函数,要求 sort(numbers) 能返回一个把 numbers 从小到大排列的数组(你可以添加多余的帮助函数)
let num = [4,2,1,3]
let minNum = (numbers)=>{
if(numbers.length>2){
return minNum(
[numbers[0],minNum(numbers.slice(1))]
)
}else{
return Math.min.apply(null,numbers)
}
}
let minIndex = (numbers)=>{
return numbers.indexOf(minNum(numbers));
}
let sort = (numbers) => {
if(numbers.length > 2){
let index = minIndex(numbers)
let min = numbers[index]
numbers.splice(index, 1)
console.log('min--'+min,'numbers--'+numbers)
// console.log('minCon--',[min].concat(sort(numbers)))
return [min].concat(sort(numbers))
}else{
return numbers[0]<numbers[1] ? numbers :
numbers.reverse()
} }
//递归思路理解
sort([4,2,1,3]) #1层
1 sort([1]+sort([4,2,3]))#2层
2 sort([1]+sort([2]+sort([4,3])))#3层
3 sort([1]+sort([2]+sort([4,3])→[3,4]))#3层
进入else, return numbers.reverse())
4 sort([1]+sort([2]+[3,4]))#2层
5 sort([1]+[2,3,4]))#1层
5 return [1,2,3,4]