![](/img/trans.png)
[英]Binary tree search not returning matching value when some nodes are null
[英]Returning the value out of a binary search function
以下代碼對數組進行二進制搜索。 我做了艱苦的工作,並獲得了理論上可以運行的代碼; 不幸的是,我很難從函數中返回值。
簡而言之,我希望返回“ len”; 如果在該行中設置斷點,您將看到“ len”包含正確的答案。 但是我錯過了一些非常愚蠢的東西。 請幫助我識別。
var states = ['Alabama','Alaska','American Samoa','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Federated States of Micronesia','Florida','Georgia','Guam','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Marshall Islands','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Northern Mariana Islands','Ohio','Oklahoma','Oregon','Palau','Pennsylvania','Puerto Rico','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virgin Island','Virginia','Washington','West Virginia','Wisconsin','Wyoming'];
function binarySearch(arr1,term){
var arr = [...arr1],
len = 0;
function helper(arr,term) {
if(arr.length > 1) {
if(arr[Math.floor(arr.length/2)] === term) {
len += Math.floor(arr.length/2);
return len;
}
if(arr[Math.floor(arr.length/2)] < term) {
len += Math.floor(arr.length/2);
arr.splice(0,Math.floor(arr.length/2));
helper(arr,term)
}
else if (arr[Math.floor(arr.length/2)] > term) {
arr.splice(Math.floor(arr.length/2),arr.length-1);
helper(arr,term)
}
} else {
return 'Element not found';
}
}
return helper(arr,term);
}
console.log(binarySearch(states,"Arizona"));
您的遞歸調用也應該返回給調用者:
更換:
helper(arr,term)
有:
return helper(arr,term)
在這兩種情況下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.