Здравко обнови решението на 11.10.2014 22:31 (преди около 10 години)
+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
.
Като цяло е хубаво решение.