Георги обнови решението на 14.10.2014 14:02 (преди около 10 години)
+def series(string, index)
+ if string == 'fibonacci' then return fibonacci(index)
+ elsif string == 'lucas'
+ return lucas(index)
+ elsif string == 'summed'
+ return summed(index)
+ end
+end
+
+def fibonacci(n)
+ if n <= 2
+ return 1
+ else
+ return fibonacci(n - 1) + fibonacci(n - 2)
+ end
+end
+
+def lucas(n)
+ if n == 1 then return 2
+ elsif n == 2
+ return 1
+ else
+ return lucas(n - 1) + lucas(n - 2)
+ end
+end
+
+def summed(n)
+ if n == 1 then return 3
+ elsif n == 2
+ return 2
+ else
+ return fibonacci(n) + lucas(n)
+ end
+end
Всичките
return
-и са излишни. В руби функциите връщат последния остойностен израз.Можеш да разгледаш
case
statement-a. Той е полезен когато имаш повече клаузи вif
-а и те правят проверка спрямо един и същ елемент.fibonacci
,lucas
иsummed
са ти почти еднакви, можеш да помислиш как да измъкнеш повтарящата се логика в отделна функция.Веднъж ползваш
n
, веднъж ползвашindex
. Бъди консистентен.index
е по-добре от двете.string
не е добро име за променлива. Помисли какво е значението на тозиstring
и му дай друго име :).