php遞歸

//歐幾里得算法:  
//1:設兩個正整數m,n,且已知m>n
//
//2:令r=m%n('%'表明取餘)
//
//3:若r=0(即n整除m),結束運算,n即爲結果
//
//4:不然令m=n,n=r,並返回步驟1
//可概括爲求兩個數的最大公約數
function test($m, $n) {
  $r = $m % $n;
 if ($r == 0) {
    $gys = $n;
    return $gys;
  }else {
    $m = $n;
    $n = $r;
    return test($m,$n)
}
};


//使用遞歸求數組中全部數字的和
function sumArr($array) {
  $sum = 0;
  if (count($array) == 0) {
    return $sum;
  }elseif (count($array) == 1) {
    return $sum += $array[0];
  }else {
    return $sum = array_shift($array) + sumArr($array);
  }
}

//使用遞歸求數組的長度
function countArr($array){
  if (empty($array)) {
    return 0;
  }else {
    array_shift($array);
    return 1 + countArr($array);
  }
}


//使用遞歸求數組中的最大元素
function maxArr($array){
  $first = array_shift($array);
  if ($first > max($array)) {
    return $first;
  }else {
    return max($array);
  }
}

//php實現快速排序算法
function quickSort($array) {
  $count = count($array);
  $less = []; //比基準值小的元素
  $greater = []; //比基準值大的元素
  if ($count < 2) {
    return $array;
  }
$pivot = $array[0]; //基準值
  for ($i=1; $i < $count; $i++) {
    if ($array[$i] < $pivot) {
      $less[] = $array[$i];
    }else {
      $greater[] = $array[$i];
    }
  }
//對小於基準值的元素進行快排
  $less = quickSort($less);
  //對大於基準值的元素進行快排
  $greater = quickSort($greater);
  $array = array_merge($less, array($pivot), $greater);
  return $array;
}

//php實現二分查找

function binarySearch($array, $item, $low=0, $high=0) {
 if(count($array)!=0 and $high==0){ //判斷是否爲第一次調用  
    //數組的元素個數
    $high = count($array);
  }
if ($low <= $high) {
    $mid = intval(($low + $high) / 2);
    if ($array[$mid] == $item) { //恰好是要找的元素
      return $array[$mid];
    } elseif ($array[$mid] > $item) { //要找的元素落在了左半區
      $high = $mid - 1;
      return binarySearch($array, $item, $low, $high);
    } else { //要找的元素落在了右半區
      $low = $mid + 1;
      //var_dump($low);die;
      return binarySearch($array, $item, $low, $high);
    }
   }
return "there is not this value";
}

$result1 = call_user_func('test', 1680, 640);
var_dump($result1);

$array = [10,20,30,40];
$result2 = call_user_func('sumArr', $array);
var_dump($result2);


$array = [10,23,24,42,12,39];
$result3 = call_user_func('countArr', $array);
var_dump($result3);

$array = [10,23,24,42,12,39];
$result4 = call_user_func('maxArr', $array);
var_dump($result4);

$array = [10,23,24,42,12,39];
$result5 = call_user_func('quickSort', $array);
var_dump($result5);
$array = [2,4,6,8,10,12,14,16,18,20]; $result6 = binarySearch($array, 15,0,0); echo("result6 = ".$result6);
相關文章
相關標籤/搜索