Я пытаюсь кодировать упражнение 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?
Спасибо
Здесь у вас функция возвращает часть чисел Фибоначчи. Вы можете установить начальный элемент (на основе 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) }
Других решений пока нет …