以下は、bcmathを使用してINFエラーを防止するロジックを実装しています。あなたのフィボナッチ関数は、実際に任意の値を返しませんので
function fibonacci($n)
{
$a = '1'; $b = '1'; $result = '0';
for ($i = 0; $i < $n; $i++) {
$sum = bcadd($a,$b);
$a = $b;
$b = $sum;
if (bcmod($a,'2') == '0') {
$result = bcadd($result,$a);
}
}
echo "<br />".$result;
}
は、しかし、あなたのロジックが完全に欠陥があるエコーフィボナッチ(400000)
EDIT
にはポイントがありません。単に、結果を得るそれが動作し、それが実際に何をどのように見て見て、それを実行するのではなく
function fibonacci($n)
{
$a = '0'; $b = '1'; $sum = '0';
$sum = '0';
do {
$fib = bcadd($a,$b);
$a = $b;
$b = $fib;
if (bccomp($fib,$n) == -1) {
if (bcmod($fib,'2') == '0') {
$sum = bcadd($sum,$fib);
}
}
++$i;
} while (bccomp($fib,$n) == -1);
return $sum;
}
echo fibonacci(4000000);
:以下は、あなたが解決しようとしている問題(再使用bcmath)のために正しい結果を与える必要があります
fibonacciへの呼び出しで、400000より低い値を使用する... PHPで可能な限り高い浮動小数点数を超えているため、INFINITE –
の結果が得られます。 bcmath関数を使用して –
私はパズルを解こうとしているので、私は低い値を使うことはできません。ここではパズルです(値が400万を超えないフィボナッチシーケンスの項を考えれば、偶数の項の和を見つけることができます)。 – Kulbir