У меня есть алгоритм для поиска всех уникальных комбинаций массива foods
. Если какая-либо из комбинаций соответствует нашему calories value
, тогда она должна возвращать значение true.PHP Функция 'return' not возвращающее значение
Вот мой подход:
<?php
$food = [
['a', 70],
['b', 5],
['c', 20],
['d', 10]
];
function eat($calories, $food, $k = 0, $p = []) {
for ($i=$k; $i < count($food); $i++) {
$r = array_merge($p, [$i]);
$c = 0;
foreach ($r as $j) {
$c += $food[$j][1];
}
if ($c == $calories) {
echo "success";
return true;
}
eat($calories, $food, $i+1, $r);
}
}
var_dump(eat(100, $food));
?>
вопрос: почему «успех» Этот код продукции, но не возвращает истину?
Вот онлайн исполнение:
http://codepad.viper-7.com/PnTEKo
Ваша функция вызывает себя рекурсивно, но никогда не передает предыдущие возвращаемые значения обратно. – mario
Как я могу это исправить? Какова временная сложность этого алгоритма? Это лучше, чем комбинации с использованием побитового оператора? – whyguy
Кто написал этот код? (Расширение вашего вопроса с помощью сложности алгоритма и вопрос об альтернативах немного широк). Исправление действительно зависит от того, как он должен себя вести. По крайней мере, сохраните предыдущий результат '$ success = eat (...);' recursion. Или возвращайтесь преждевременно, когда это правда, или сохраняйте его до тех пор, пока цикл не будет, и тогда он не вернется. – mario