Гюлджан обнови решението на 12.10.2014 18:02 (преди около 10 години)
+def compute_fibonacci(index)
+ if index <= 1
+ return index
+ else
+ number = compute_fibonacci(index - 1) + compute_fibonacci(index - 2)
+ end
+ number
+end
+
+def compute_lucas(index)
+ if index <= 1
+ return 2
+ elsif index == 2
+ return 1
+ else
+ number = compute_lucas(index - 1) + compute_lucas(index - 2)
+ end
+end
+
+def series(row, index)
+ if row == "fibonacci"
+ compute_fibonacci(index)
+ elsif row == "lucas"
+ compute_lucas(index)
+ else
+ compute_fibonacci(index) + compute_lucas(index)
+ end
+end
Здравей (:
-
row
не е хубаво име в този контекст. Математическа редица се наричаsequence
:) - Когато имаш последователност от
if .. elsif ..
и всички те правят проверка върху един и същ елемент(в случая променливатаrow
), може да замениш тази конструкция сcase
. Така ще стане по-приятно за четене. - В ruby
if-else
конструкциите връщат стойноста на бранча, който се е изпълнил. Т.е можеш да махнеш всичкиreturn
-и, както e вseries
. - Във функцията
compute_fibonacci
нямаш нужда от тази променливаnumber
.
Много благодаря :)
В series като заменя if с case, функцията става 6 реда :/ Какво мога да направя?
Пробва ли синтаксиса с when
и then
?
Пример:
case year
when 1850..1889 then 'Blues'
when 1890..1909 then 'Ragtime'
when 1910..1929 then 'New Orleans Jazz'
when 1930..1939 then 'Swing'
when 1940..1950 then 'Bebop'
else 'Jazz'
end
Ще ти се получи точно на 5 реда (I think so...).
Ахаа, да, много благодаря. :)