2014 dxdy logo

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

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




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


15/11/15
1080
Я тоже привык, что "официальное решение" - рекурсивное :-)
Как доходят - в практически любом языке программирования - до темы про рекурсивные функции - так тебе факториал или Фибоначчи. Благодаря тернарному оператору в 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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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