2014-12-17 4 views
3

Я пытаюсь выполнить простой двоичный поиск. Я ожидаю, что эта функция вернет «false» или «true», но, похоже, ничего не возвращает. Я попытался вернуть целые числа или строки, просто чтобы увидеть, вернет ли он другой тип данных, но, похоже, это не так. Что я делаю не так?php-функция не возвращает никакого значения

<?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); 

?>

+2

Рекурсивные обращения к бинарному поиску должны возвращать ответ от этого вызова, создавая резервную копию стека вызовов –

ответ

3

ваших рекурсивных вызовов BinarySearch должны возвращать ответ от этого обратного вызова по стеке вызовов функции BinarySearch ($ пункта, $ первых, $ последнего) {

$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); 
     } 
    } 
} 
0

Функция binarySearch возвращается только тогда, когда $first больше, чем $last.

Во всех остальных случаях он ничего не возвращает.

Положите return перед вызовом функции в функции binarySearch.

Смежные вопросы