1

これは宿題ではないことを約束します。私はただの好奇心旺盛な初心者です。

これはどのように行われますか:

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);
}

(私の)

構文がわからないと思います。そこにifステートメントはありますか?

4

5 に答える 5

5

オペレーター "?" 三項演算子という名前です。これは次のように使用されます。p1?p2:p3 p1が真の場合は、p2、それ以外の場合はp3と表示されます。

于 2009-11-28T02:44:37.937 に答える
3

最初の関数は省略形です。これが何をしているのか

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

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

于 2009-11-28T02:47:04.593 に答える
3

そこにif文があります。三項演算子と呼ばれます。

condition ? if true : if false

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

于 2009-11-28T02:48:27.470 に答える
2

疑問符は条件式です。

x ? a : b

trueか、 falseaかを評価します。xb

于 2009-11-28T02:45:19.090 に答える
2
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);
}

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

もう 1 つの関数は、生成された結果のキャッシュを作成して使用します。これは、fib(4) を評価するため、重要な最適化です。

于 2009-11-28T02:47:57.220 に答える