Божидар обнови решението на 13.10.2014 23:33 (преди около 10 години)
+def series(type, number)
+
+ if type == 'fibonacci'
+ fibonacci(number)
+ elsif type == 'lucas'
+ lucas(number)
+ else
+ return fibonacci(number) + series("lucas",number)
+ end
+end
+
+def fibonacci(number)
+ return 1 if number <= 2
+ return fibonacci(number-1) + fibonacci(number-2)
+end
+
+def lucas(number)
+ return 1 if number == 2
+ return fibonacci(number-2) + fibonacci(number)
+end
- Ред 2 е излишен.
- Индентацията на ред 4 не е добре.
- В руби функциите връщат стойността на последния остойностен израз. Т.е можеш да махнеш
return
-ите които са последни и не използваш за да прекратиш преждевременно функцията. - Оставяй място след запетая, и около оператори като
-
,+
,==
и т.н. Може да разгледаш style guide-a. -
Не ползвай
fibonacci
за да смяташlucas
. Използваш някаква зависимост между членовете на редицата на Фибоначи и Лукас, която натоварва излишно. Ако поискам редица с други начални стойности, ще трябва да напишеш нова функция, и да мислиш нова зависимост между двете редици. Няма да подаваме други начални стойности и въобще не е задължително да се имплементира такава фунцкионалност, но просто искам да ти покажа недостатъците на решението ти.Рекурентната зависимост и за двете редици е еднаква. Можеш да извадиш тази логика в отделна функция, и да преизползваш нея за
fibonacci
иlucas
. Разгледай
case
конструкцията, използвайки яseries
ще стане по-четима.