我有一個算法來查找所有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