Петя обнови решението на 13.10.2014 18:37 (преди около 10 години)
+def fibonacci(number)
+ if number < 2
+ number
+ else
+ fibonacci(number-1) + fibonacci(number-2)
+ end
+end
+
+def lucas(number)
+ if number == 1
+ 2
+ elsif number == 2
+ 1
+ else
+ lucas(number-1) + lucas(number-2)
+ end
+end
+
+def summed (number)
+ fibonacci(number) + lucas(number)
+end
+
+def series(function, number)
+ if function == 'fibonacci'
+ fibonacci(number)
+ elsif function == 'lucas'
+ lucas(number)
+ else
+ summed(number)
+ end
+end
- Имаш малък whitespace проблем. Погледни style guide-a, за да го адресираш.
- function не е най-добрият избор тук. Първо, не ви подаваме функция, а име на ред. Второ, много е generic. Всяка функция може да се казва function. Опитай се да става ясно какъв е смисълът точно зад тази 'функция'.
- Леко си разширила дефиниционното множество на нашия fibonacci. Като цяло не се интересуваме какво връща или как гърми методът с недефинирани стойности. Но когато е без trade-off е добре кодът ти да не разчита на тях. С други думи трябва да си представиш, че винаги когато викаш
fibonacci(2)
(и съотвено друго по-голямо число) използвашfibonacci(0)
, който унищожава света и решението ти не сработва. (: - Експериментирай дали няма да ти изглежда по-красиво, ако замениш
if
-овете сcase
(when
-then
). Така кодът ти няма да има назъбен вид (редуване на редове с нещо и такива, които са почти празни).