Светлозар обнови решението на 11.10.2014 18:32 (преди около 10 години)
+def series(string, number)
+
+ if (string == 'fibonacci') then return fibonacci(number)
+
+ elsif (string == 'lucas') then return lucas(number)
+
+ elsif (string == 'summed') then return summed(number)
+
+ end
+
+end
+
+def fibonacci(number)
+
+ if(number < 3)
+
+ return 1
+
+ else
+
+ fibonacci(number - 1) + fibonacci(number - 2)
+
+ end
+
+end
+
+def lucas(number)
+
+ if(number < 3)
+
+ return 3 - number
+
+ else
+
+ lucas(number - 1) + lucas(number - 2)
+
+ end
+
+end
+
+def summed(number)
+
+ fibonacci(number) + lucas(number)
+
+end
- Не слагай ненужни празни редове в началото, средата и края на методите. По принцип те се използват за логическо разделение (например изчисленията от върнатата стойност).
- Не ограждай условията на
if
-oвете в скоби. - string e много generic име. Всеки string е възмоно да се казва string. Точно този string в тази ситуация има някакво конкретно значение. Опитай се имената да изразяват семантиката на променливите.
- Ако ти се наложи да слагаш
if
-then
на един ред е добре да погледнешcase
(switch
-ът в Ruby). - Изглежда си видял какво връщат методите.
if
конструкциите връщат последния оценен израз на match-налия случай, ако няма такъв -nil
. С други думи можеше да пропуснеш всичкиreturn
-и в кода. - Знам, че ти изглежда просто, но
3 - number
не е моментално очевидно какво прави. Предпочитай ясни пред хитроумни и кратки решения.