PHP:このコードがどのように機能するかを説明できますか? (フィボナッチ)

StackOverflow https://stackoverflow.com/questions/1811368

  •  06-07-2019
  •  | 
  •  

質問

これは宿題ではないと約束します。私は好奇心が強い初心者です。

これの仕組み:

function f($i){return $i<2?$i:f($i-1)+f($i-2);}

(賢い人によって書かれた)

これと同じ結果を生成します

function fibonacci($n, $arr = array(0,1)){
    $arr[] = $arr[(count($arr) - 1)] + $arr[(count($arr) - 2)];
    if (count($arr) == $n) return $arr[$n - 1];
    else return fibonacci($n, $arr);
}

(mine)

構文を取得していないだけだと思います。そこにifステートメントがありますか?

役に立ちましたか?

解決

演算子&quot;?&quot;三項演算子です。 p1?p2:p3のように使用されます。p1がtrueの場合はp2、そうでない場合はp3です。

他のヒント

そこにはifステートメントがあります。 三項演算子と呼ばれます。

condition ? if true : if false

$ iが2未満の場合は$ iを返し、そうでない場合はf($ i-1)+ f($ i-2)を返します。再帰的な関数呼び出しは、あなたが理解するのに苦労しているものではないと仮定していますが、もしそれがあれば、グーグルでグーグルで再帰的なフィボナッチコードの例がたくさんあります。

最初の関数は速記です。これが何をしているのか

if($i < 2) { // $i < 2 ?
  return $i;
}
else { // :
  return f($i-1)+f($i-2);
}

2未満の場合、関数を呼び出す必要はありません。 2以上の場合、関数は再帰的に呼び出されます。

疑問符は条件式です:

x ? a : b

x がtrueの場合は a に評価され、falseの場合は b に評価されます。

function f($i){return $i<2?$i:f($i-1)+f($i-2);}

意味

function f($i)
{
    if $(i < 2)
        return $i;
    return f($i-1) + f($i-2);
}

これはフィボナッチ方程式の直接的な表現です。

他の関数は、生成された結果のキャッシュを作成して使用します:これは、たとえばfib(4)を評価するので、たとえばfib(2)を3回または4回、fib(1)を非常に多く評価するため、重要な最適化です詳細。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top