该函数正在返回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);
很简单的。使用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
。我希望这有帮助!:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句