Филипа обнови решението на 14.10.2014 09:47 (преди около 10 години)
+def fibonacci (n)
+ n <= 2 ? 1 : fibonacci(n-1) + fibonacci(n-2)
+end
+def lucas (n)
+ n <= 2 ? n % 2 + 1 : lucas(n-1) + lucas(n-2)
+end
+def series (sequence , number)
+ if sequence == 'fibonacci'
+ fibonacci(number)
+ else
+ sequence == 'lucas' ? lucas(number) : lucas(number) + fibonacci(number)
+ end
+end
Привет :)
- За метода
series
може би ще е добра идея да погледнешcase
, което може да направи нещата доста по-четими и разбираеми, също така ще избегнешif
и тернарен оператор. - Като цяло тернарния оператор е практика, която е добра в много много редки случаи, и според мен това не е такъв (Малко криптично е и това не е C/C++). В случая може да се замени с един
if
от видаx if y
и оставяне на основната част от рекурсията на последния ред :) - Също е хубаво да хвърлиш едно око на style guide-a по въпрос на интервалите (например знака
-
и интервала след името на метода, също така и,
при аргументите) - Има известна неконсистентност с изпозването на имената
n
иnumber
. Аз лично бих препоръчал да използваш второто, защото е по-разбираемо и по-четимо.
Иначе като цяло добро решение :)
Когато написах series с case , методът стана 6 реда, а ограничението изисква редовете да не са повече от 5, иначе ще погледна style guide-а пак. Благодаря :)