平常,練手,沒查過是否最優解。
有更優解的朋友,歡迎留言懟我,感謝。
題:給定一個亂序的、純數字的、值不重複的數組,請用遞歸,將其排序。
輸入:[12, 42, 5, 23, 65]
輸出:[5, 12, 23, 42, 65]
解:php
function quick_sort($array) { if (count($array) > 1) { $array_left = []; $array_right = []; $base = array_pop($array); foreach ($array as $item) { if ($base < $item) { array_push($array_left, $item); } else { array_push($array_right, $item); } } $array_left = quick_sort($array_left); $array_right = quick_sort($array_right); return array_merge($array_left, [$base], $array_right); } return $array; } $array = [2, 6, 12, 3, 1, 9]; print_r(quick_sort($array)); /* Result is Array ( [0] => 12 [1] => 9 [2] => 6 [3] => 3 [4] => 2 [5] => 1 ). */
題:給定一個數字數組,請用遞歸,將其內部的值相加。
輸入:[2, 4, 6]
輸出:12
解:數組
function sum($array) { if (count($array) > 1) { return array_pop($array) + sum($array); } return $array[0]; } echo sum([2, 6, 3, 1, 9]); // Result is 21.
題:給定數組與上題相同,請用遞歸,統計其內部值的個數。
輸入:[2, 4, 6]
輸出:3
解:ui
function array_count($array) { $count = 0; if ($array !== []) { array_pop($array); return ++$count + array_count($array); } return $count; } echo array_count([2, 6, 10, 3, 1, 9]); // Result is 6