该函数返回undefined
,它是JavaScript中的简单二进制搜索代码。当我用console.log()
检查时,该功能确实可以正常工作。下面是我的源代码:
var array=[1,2,3,2,4,5,6,8,7,8,9];
var searching= 3;
var starting = 0;
var ending = array.length-1;
var result = binarysearch(array,searching,starting,ending);
console.log(result); // throws undefined
function binarysearch(data,target,start,end){
var mediane = Math.round((start+end)/2);
if (data[mediane] == target) return mediane; // console.log(mediane) gives 2
if (data[mediane] > target) binarysearch(data,target,start,mediane-1);
if (data[mediane] < target) binarysearch(data,target,mediane+1,end);
答案 0 :(得分:1)
非常简单。使用return
跟踪调用堆栈。
var array=[1,2,3,2,4,5,6,8,7,8,9];
var searching= 3;
var starting = 0;
var ending = array.length-1;
var result = binarysearch(array,searching,starting,ending);
console.log(result); // throws undefined
function binarysearch(data,target,start,end){
var mediane = Math.round((start+end)/2);
if(data[mediane] == target) return mediane; // console.log(mediane) gives 2
if ( data[mediane] > target) return binarysearch(data,target,start,mediane-1);
if ( data[mediane] < target) return binarysearch(data,target,mediane+1,end);
}
说明:
使用递归调用时,控件从一个函数分支转到另一个函数分支。为了返回一个确定的值,您需要传递控件(函数上下文或知道程序现在在何处执行的事物)。您没有返回递归分支;这意味着执行栈正在创建一个新函数,并且由于没有得到输出,因此将其视为一个单独的分支。
当您执行return
时,上下文知道它必须将函数分支出来并使用最终的返回值:在这种情况下为2
。我希望这有帮助! :)
答案 1 :(得分:0)
在对return
的递归调用中使用binarysearch
关键字。如果没有return
,则函数显然将返回undefined
。
var array=[1,2,3,2,4,5,6,8,7,8,9];
var searching= 3;
var starting = 0;
var ending = array.length-1;
var result = binarysearch(array,searching,starting,ending);
console.log(result); // throws undefined
function binarysearch(data,target,start,end){
var mediane = Math.round((start+end)/2);
if(data[mediane] == target) return mediane; // console.log(mediane) gives 2
if ( data[mediane] > target) return binarysearch(data,target,start,mediane-1);
if ( data[mediane] < target) return binarysearch(data,target,mediane+1,end);
}