我有一个算法来查找所有foods
数组的唯一组合。如果任何组合符合我们的calories value
那么它应该返回true。PHP函数'返回'不返回值
这里是我的方法:
<?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));
?>
的问题是:为什么这段代码输出“成功”,但不会返回true?
这里是在线执行:
http://codepad.viper-7.com/PnTEKo
你的函数以递归方式调用它自己,但是永远不会传回以前的返回值。 – mario
我该如何解决这个问题?这个算法的时间复杂度是多少?这比使用按位运算符的组合更好吗? – whyguy
那么谁写了那段代码? (用算法复杂度扩大你的问题并询问替代方法有点宽泛)。解决方案真的取决于它应该如何表现。至少保存以前的'$ success = eat(...);'递归结果。要么过早返回true,要么保持它直到循环之后,然后“返回”它。 – mario