1.遞歸
主要是控制三個變量 start end mid ,開始 結束 中間,反覆就ok了。
const data = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
function Recursive(s,data){
let len = data.length
let start = 0
let end = len-1
let mid
return find(start,end,s)
}
function find(start,end,s){
mid =Math.ceil((end+start)/2)
if (s==data[mid]) {
return s
}
else if(s>data[mid] && start <= end) {
end = mid-1
return find(start,end,s)
}
else if(s<data[mid] && start <= end){
start = mid+1
return find(start,end,s)
}
else{
return null
}
}
let v = find(0,15,data)
console.log("vvvv",v)
- while循環
const data = [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
function while_find(s){
let len = data.length
let start = 0
let end = len-1
let mid
while(start <= end){
mid =Math.ceil((end+start)/2)
if (s<data[mid]) {
start = mid+1
}
else if(s>data[mid]){
end = mid-1
}
else{
return s
}
}
return null
}
let v= while_find(8)
console.log("vvvv",v)
主要借鑑了這篇文章 點擊打開 裏面還有一些二分算法的變形, 感興趣的同學可以去看看 寫的很棒。