Числа Фибоначчи начинаются с 0, 1, 2, 3, 5 для вариантов 2, но как мне начать для варианта 3 или 4

Я пытаюсь кодировать упражнение codility les 13 ladder.php.
Вы должны рассчитать, используя числа Фибоначчи, общее количество способов подняться по лестнице, когда вы можете сделать 1 или 2 ступени за один раз.

Я сделал цикл, создав первые 50 чисел Фибоначчи, например:

$total = 50;
$fibonacci[0]=0;
$fibonacci[1]=1;
for($i=2;$i<=$total;$i++){
$fibonacci[$i] = $fibonacci[($i-1)] + $fibonacci[($i-2)];
}

Это хорошо работает, если вы можете сделать 1 или 2 ступени за раз.

Но как мне настроить этот цикл, чтобы дать мне первые 50 чисел Фибоначчи, если вы можете взять 1, 2 или 3 ступени за раз.

если вы можете взять 1 или 2 ступени, которые вы используете: Fx = F[(x-1)] + F[(x-2)];

если вы можете сделать 1, 2 и 3, вы используете: Fx = F[(x-1)] + F[(x-2)] + F[(x-3)];

если вы можете сделать 1, 2, 3 и 4, вы используете: Fx = F[(x-1)] + F[(x-2)] + F[(x-3)] + F[(x-4)];

Затем вы можете сделать столько чисел или рассчитать столько чисел, сколько пожелаете.
Но вам всегда нужны первые несколько чисел, чтобы можно было производить расчеты.

Я надеюсь, что эта таблица проясняет, что я имею в виду:

    2   3   4   5   6
1   1   1   1   1   1
2   2   2   2   2   2
3   3   4   4   4   4
4   5   7   8   8   8
5   8   13  15  16  16
6   13  24  29  31  32

Ряд ниже 2 — основные фибоначчи

Ниже 3 мне нужно число от 1 до 3, чтобы можно было рассчитать # 4 и так далее

Ниже 4 мне нужны первые 4, чтобы можно было рассчитать # 5 и т. Д.

Может ли кто-нибудь помочь мне создать цикл для создания первых, скажем, 10 номеров для строк 4 и 5 и 6?

Спасибо

-2

Решение

Здесь у вас функция возвращает часть чисел Фибоначчи. Вы можете установить начальный элемент (на основе 0) и сколько элементов вам нужно.

function takeFibonacci($start, $length)
{
$fibonacci = array(0, 1);
$result = array();

$position = 0;
do {
if (!isset($fibonacci[$position])) {
$fibonacci[$position] = $fibonacci[$position - 1] + $fibonacci[$position - 2];
}

if ($position >= $start) {
$result[] = $fibonacci[$position];
}

$position++;
} while ($position < $start + $length);

return $result;
}

$fib = takeFibonacci(5, 5);
var_dump($fib);

Код выше возвращает этот результат

array (5) {[0] => int (5) [1] => int (8) [2] => int (13) [3] => int (21) [4] => int (34) }

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]