Здравко обнови решението на 11.10.2014 22:31 (преди около 11 години)
+def fibonacci(number)
+ return 1 if number == 1
+ return 1 if number == 2
+ fibonacci(number - 1) + fibonacci(number - 2) if number > 2
+end
+
+def lucas(number)
+ return 2 if number == 1
+ return 1 if number == 2
+ lucas(number - 1) + lucas(number - 2) if number > 2
+end
+
+def series(option, range)
+ return fibonacci(range) if option == 'fibonacci'
+ return lucas(range) if option == 'lucas'
+ return fibonacci(range) + lucas(range) if option == 'summed'
+end
-
optionне е много добро име. Опитай се да дадеш нещо по-близо до семантиката на съдържаната стойност. -
rangeе леко подлъгващо име. Когато някой го прочете си мисли едно от две неща - класътRange/негови инстанции (нещата, които се получават с(x..y),(x...y)илиx.upto(y)) или отрязък от числовата ос. Тук не искаме редицата в някакъв отрязък, а в точно определена точка. - Предполагам си сложил
return-а на последния ред вseriesза естетическа консистентност. Недей. Имаш няколко опции - използвайcase(switch-ът в Ruby) илиif-elsif-else. Може да настояваш наreturn x if y, ако имаш някакви изключения и след тях идва логиката за 'главния случай', но тогава ги отдели от нея с празен ред и не слагайreturnнакрая. - Приложи горната точка също за
fibonacciиlucas. Проверкатаif number > 2е излишна, като цяло не се грижи за невалидни входни данни. - Можеше да слееш двете проверки във
fibonacciкато сложиш единor.
Като цяло е хубаво решение.
