我正在尝试简单的二进制搜索。我希望这个函数返回'false'或'true',但它似乎没有返回任何东西。我尝试返回整数或字符串,只是为了看它是否会返回另一种数据类型,但它似乎没有这样做。我做错了什么?
<?php
function binarySearch($item, $first, $last){
$numbers=array(3, 5, 9, 11, 17, 24, 38, 47, 50, 54, 57, 59, 61, 63, 65);
if ($first>$last){
return false;
}
else {
$middle=($first+$last)/2;
$middle=(int)$middle;
if ($item==$numbers[$middle]){
echo "found the correct value<br/>";
return true;
}
elseif ($item<$numbers[$middle]){
binarySearch($item, $first, $middle-1);
}
else {
binarySearch($item, $middle+1, $last);
}
}
}
$n=$_GET['txtTarget'];
$first=$_GET['txtFirst'];
$last=$_GET['txtLast'];
echo "the return value is: " . binarySearch($n, $first, $last);
&GT;
答案 0 :(得分:3)
您对binarysearch的递归调用应该从该调用返回响应调用堆栈的响应 函数binarySearch($ item,$ first,$ last){
$numbers=array(3, 5, 9, 11, 17, 24, 38, 47, 50, 54, 57, 59, 61, 63, 65);
if ($first>$last){
return false;
}
else {
$middle=($first+$last)/2;
$middle=(int)$middle;
if ($item==$numbers[$middle]){
echo "found the correct value<br/>";
return true;
}
elseif ($item<$numbers[$middle]){
return binarySearch($item, $first, $middle-1);
}
else {
return binarySearch($item, $middle+1, $last);
}
}
}
答案 1 :(得分:0)
只有当$first
大于$last
时,您的binarySearch函数才会返回。
在所有其他情况下,它不会返回任何内容。
将return
放在binarySearch函数中的函数调用之前。