Zealint писал(а):
мастер ФП сразу скажет, что давайте возведём специальную матрицу размером 2x2 в степень N и нужное нам число Фибоначчи будет лежать в заведомо выбранной ячейке.
Для реального расчёта числа Фибоначчи я бы вообще использовал следующий очень эффективный (для больших значений) код:
Код:
double Fibo (int n) {
double s5 = sqrt(5);
return (power((1+s5)/2,n)-power((1-s5)/2,n))/s5;
}
парадоксально дающий целочисленный результат, несмотря на промежуточное использование иррациональных чисел. Дело в том, что и ваш и мой код уходят от первоначального определения последовательности и в некотором смысле являются "твиками" людей, которые знают свойства этих чисел чуть больше, чем среднестатистический человек. Если рядовому программисту дадут определение последовательности и поручат написать соответствующий код, большинство сделает это именно так. Кроме того, я же и указал традиционный способ решения подобных проблем в ФП. Пример выбран по двум причинам - он достаточно прост для понимания (не вдаваясь в высшую математику), но вместе с тем он наглядно демонстрирует разницу подходов и вероятные проблемы (не утверждая при этом, что эти проблемы не имеют решения!).
Zealint писал(а):
Кстати, каркасные дома строят (нормальные люди), удачно совмещая в себе оба подхода...
Так ведь и я говорю, что ФП заставило изменить множество вещей в ИП, т.е. да, есть сильное обратное влияние, и в этом состоит грандиозная польза ФП. Но в качестве основы для своих целей я предпочитаю ИП.
Zealint писал(а):
Мне нравится, когда к аналогиям нельзя придраться, даже когда они мне понятны и я их поддерживаю.
Может быть тогда предложите аналогию, столь же простую и понятную, как ряд Фибоначчи?
Я бы тоже предпочёл иметь пример, к которому нельзя придраться, однако, большинство проблем из области математики и CS может иметь несколько разных решений.