PHP コードで書かれた二分探索プログラム
function BinSearch($a,$low,$heigh,$key){
if($low > $heigh){
return null;
}else{
$mid = (int)($low+$heigh)/2;
$mid = ceil($mid);
// echo "a[] : ".$a[$mid]."
";
// echo "key:".$key."
";
if($key = = $a[$mid]){
return $mid;
echo $mid;
}elseif($a[$mid] < $key){
$low = $mid + 1 ;
BinSearch($a, $low, $heigh, $key);
}elseif ($a[$mid] > $key){
$heigh = $mid - 1 ;
BinSearch($a, $low, $heigh, $key);
}
return null;
}
}
$a = array(0,1,2,3 , 4,5,6,7,8,9);
$key = 3;
$result = BinSearch($a, 0, 9, $key);
echo "結果:"。 result."
";
?>
期待した結果が得られない理由を教えてください。プログラムの何が問題なのでしょうか?
-----解決策---------
再帰呼び出しには戻り値はありません
function BinSearch($a,$low,$heigh,$key){ if($low > $heig){ null を返します。 }それ以外{ $mid = (int)($low+$heigh)/2; $mid = ceil($mid); if($key == $a[$mid]){ $mid を返します。 エコー $mid; }elseif($a[$mid] < $key){ $low = $mid + 1; return BinSearch($a, $low, $heigh, $key);//ここ }elseif ($a[$mid] > $key){ $heigh = $mid - 1 ; return BinSearch($a, $low, $heigh, $key);//そしてここ } null を返します。 } <div class="clear"></div>