Кристиан обнови решението на 11.10.2014 21:34 (преди около 11 години)
+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накрая.
Като цяло нямаш трагични грешки, ако адресираш горните точки решението ще е много прилично.
