2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 20:29 


15/11/15
1100
Я тоже привык, что "официальное решение" - рекурсивное :-)
Как доходят - в практически любом языке программирования - до темы про рекурсивные функции - так тебе факториал или Фибоначчи. Благодаря тернарному оператору в JS выглядит вполне изящно:
Код:
function fib(n) {
  return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}

Конечно, быстродействия ждать не стоит.

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:05 


05/09/12
2587
Нет, я имел в виду итеративное, но простое и понятное, а не те варианты которые представлены. С преобразованием пары по правилу
Код:
(a, b) = (b, a+b)
Которое в соседней теме про Питон один участник написал аж несколько раз, правда что-нибудь более осмысленное так и не удосужился :-(
А по поводу быстродействия экспоненциально-рекурсивного варианта - добавить мемоизацию и будет такое же быстродействие, как в итеративном варианте. А насчет "как доходят до темы" - то и через оператор неподвижной точки решают, и через экспоненциальное возведение матрицы в степень, и как только не.

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:08 
Аватара пользователя


01/12/11

8634
_Ivana в сообщении #1324413 писал(а):
За всю предыдущую жизнь не видел столько странных реализаций этой функции. Хотя видел их немало :-)

А может, сыграем в Code Golf? Кто за?

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:12 


05/09/12
2587
Можно. Но чур каждый выбирает себе язык на котором играет :-) И надо как-то решить вопрос с библиотеками, чтобы не было решений в стиле - импортируем либу и вызываем пару функций.
Если будут участвовать знатоки регулярок и J, то они имхо разделят первые места. Но вряд ли здесь они присутствуют, и тем более присоединятся.

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:19 
Аватара пользователя


01/12/11

8634
_Ivana в сообщении #1324460 писал(а):
Но чур каждый выбирает себе язык на котором играет :-)

А разве нет языков, в которых Фибо одной командой программируется?

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:25 


05/09/12
2587
Непонятно что значит "одной командой". Вызовом существующей библиотечной функции? Ну если кто-то додумается написать соответствующую либу, то да. Но это не гольф :-)

А для примера решение на неземном и волшебном (С)
Используется синтаксис Haskell
c = 0 : 1 : zipWith (+) c (tail c)

f = (!!) c
Хотя можно и погольфовее написать, но если в состав тестов войдут аргументы более 35-45, наивная рекурсия не пройдет

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:37 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
_Ivana в сообщении #1324460 писал(а):
И надо как-то решить вопрос с библиотеками, чтобы не было решений в стиле - импортируем либу и вызываем пару функций.
Ktina в сообщении #1324461 писал(а):
А разве нет языков, в которых Фибо одной командой программируется?
_Ivana в сообщении #1324463 писал(а):
Ну если кто-то додумается написать соответствующую либу, то да.
Выбираю Mathematica / Wolfram Language. Там есть функция Fibonacci[n] и она в ядре, не требует вызова никаких либ :mrgreen:

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:41 


05/09/12
2587
Итеративный вариант
Используется синтаксис Haskell
f = fst . (iterate (\(a,b) -> (b,a+b)) (0,1) !!)


ЗЫ надо найти язык с готовой Fib[n] в ядре :-) Хотя, собственно что это я - в свой язык добавлю в ядро под именем f и одержу абсолютную и безоговорочную победу :mrgreen:

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:47 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
_Ivana в сообщении #1324467 писал(а):
ЗЫ надо найти язык с готовой Fib[n] в ядре
Вы опоздали, см. выше ;-D

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:48 


05/09/12
2587
Отнюдь. Если найти язык с Fib, то он победит Математику Вольфрама, поскольку символов в коде будет меньше :-)

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение04.07.2018, 23:50 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Вынужден согласиться.

 Профиль  
                  
 
 Re: Фибоначчи на JavaScript, ошибки новичков
Сообщение05.07.2018, 00:01 


05/09/12
2587
Ну и раз тема про JS, например на нем :-)

Используется синтаксис Javascript
f = (n, a=0, b=1) => n ? f(n-1, b, a+b) : a


Или наивно-рекурсивный стандарт

Используется синтаксис Javascript
g = (n) => n<2 ? n : g(n-1) + g(n-2)


Собственно, с этими двумя котами я готов участвовать в джаваскриптовом гольфе по фибоначчам :-) , кот выбирается в зависимости от тестовых данных - второй короче, но зависнет на аргументах выше 45

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Geen


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group