Емилиан обнови решението на 09.10.2014 00:41 (преди около 10 години)
+def series(type, index)
+ return fibonacci(index) if type == 'fibonacci'
+ return lucas(index) if type == 'lucas'
+ fibonacci(index) + lucas(index) if type == 'summed'
+end
+
+def fibonacci(index)
+ return 1 if index == 1 or index == 2
+ fibonacci(index - 1) + fibonacci(index - 2)
+end
+
+def lucas(index)
+ return 2 if index == 1
+ return 1 if index == 2
+ lucas(index - 1) + lucas(index - 2)
+end
-
x if y
синтаксисът в Ruby е много красиво нещо, но лично аз бих се замислил дали не е по-добре да го разпиша с обикновенif
-elsif
-else
, ако го ползвам на всеки ред в метода си и то в комбинация с control flowreturn
-и. Опционално може да разгледаш иcase
(switch
-ът в Ruby). - fibonacci и lucas са имена на редове, не типове. Наша грешка, поправихме се.
Като изключим това, решението ти е напълно наред.
Замислих се и за двата предложени варианта. Избрах този единствено заради ограниченията в дължината на методите.
Не всичко, което е 'физически' ред, се брои като ред от skeptic. Може да погледнеш и/или да експериментираш. Да използваш when
- then
на един и същи ред също е напълно приемливо.