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

(мой)

Полагаю, я просто не понимаю синтаксиса.Есть ли там оператор if?

Это было полезно?

Решение

Оператор "?" называется тройным оператором.Он используется как:p1?p2:p3 говорит, что если p1 истинно, то 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 или больше, функция вызывается рекурсивно.

Знак вопроса является условным выражением:

x ? a : b

оценивается как a если x верно, или 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