为什么我的递归函数return "undefined"?

Why does my recursive function return "undefined"?

函数返回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 一个确定的值,你需要传递控制(函数上下文,或者知道程序现在在哪里执行的东西)。您没有 return 使用递归分支;这意味着执行堆栈正在创建一个新函数,并且由于它没有获得输出,因此将其视为一个单独的分支。

当您执行 return 时,上下文知道它必须将函数分支出去并使用最终的 return 值:在本例中为 2。我希望这有帮助! :)

在对 binarysearch 的递归调用中使用 return 关键字。如果没有 return,您的函数显然会 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);

}