Кристиан обнови решението на 11.10.2014 21:34 (преди около 10 години)
+def series(sequence, index)
+ return fibonacci(index) if sequence == 'fibonacci'
+ return lucas(index) if sequence == 'lucas'
+ return fibonacci(index) + lucas(index)
+end
+
+def fibonacci(index)
+ fibonacci_iterator(1, 1, index)
+end
+
+def fibonacci_iterator(first, second, index)
+ if index == 1
+ second
+ else
+ fibonacci_iterator(first + second, first, index - 1)
+ end
+end
+
+def lucas(index)
+ lucas_iterator(2, 1, index)
+end
+
+def lucas_iterator(first, second, index)
+ if index == 1
+ first
+ else
+ lucas_iterator(second, first + second, index - 1)
+ end
+end
-
fibonacci_iterator
иlucas_iterator
звучат повече като имена на някакви класове или променливи. Опитай се да измислиш по-добри. Също какво саfirst
иsecond
? Може би първият и вторият член на редицата, но после стават нещо друго. -
fibonacci_iterator
иlucas_iterator
не правят ли едно и също с разменени аргументи? Можеш ли да ги слееш в един метод, който да преизползваш? - Предполагам си сложил
return
-а на последния ред вseries
за естетическа консистентност. Недей. Имаш няколко опции - използвайcase
(switch
-ът в Ruby) илиif
-elsif
-else
. Може да настояваш наreturn x if y
, ако имаш някакви изключения и след тях идва логиката за 'главния случай', но тогава ги отдели от нея с празен ред и не слагайreturn
накрая.
Като цяло нямаш трагични грешки, ако адресираш горните точки решението ще е много прилично.