$inputNumbers = [3279, 920, 4181, 8, 337, 13, 918, 4923, 1,
4448, 8, 4756, 4012, 7467, 89, 21, 9238, 2326, 6453, 89, 4606,
3413, 3, 9950, 2098, 8579, 4914, 7204, 8875
];
$max_val = max($inputNumbers);
$result_sum = 0;
$fib_prev_prev = 0;
$fib_prev = 1;
$fib_temp = $fib_prev_prev + $fib_prev;
for ($i = 0; $fib_temp <= $max_val; $i++) {
$found = 0;
$fib_temp = $fib_prev_prev + $fib_prev;
$fib_prev_prev = $fib_prev;
$fib_prev = $fib_temp;
if (array_search($fib_temp, $inputNumbers)) {
$found = 1;
$result_sum += $fib_temp;
}
echo $i," - ",$fib_temp, ($found==1 ? " found":""),"\n";
}
echo "Result sum ", $result_sum, "\n";
Сначала я хотел сказать, что реализовали не айс. Подумал, что если в исходном массиве сделать очень большое число, то генерируемый массив сожрет всю память :) Но потом долго смеялся, что уже на 90 числе было переполнение 64-бит и тип стал float. Ведь по большому счету Фибоначчи почти что степень двойки. Никакого такого супер массива сгенерить не получится. Ваш код работает, и мой тоже. Даже не берусь оценивать чей лучше. Хотелось бы увидеть мнение общественности. Мне кажется у меня подход проще.
0 - 1 found
1 - 2
2 - 3 found
3 - 5
4 - 8 found
5 - 13 found
6 - 21 found
7 - 34
8 - 55
9 - 89 found
10 - 144
11 - 233
12 - 377
13 - 610
14 - 987
15 - 1597
16 - 2584
17 - 4181 found
18 - 6765
19 - 10946
Result sum 4316
Возможно по заданию надо это все затолкнуть в массив ? Но чето сформулировано не очень конкретно.