为什么我的递归函数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);
}
函数返回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);
}