Решение на Първа задача от Гюлджан Купен

Обратно към всички решения

Към профила на Гюлджан Купен

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 12 успешни тест(а)
  • 0 неуспешни тест(а)

Код

def compute_fibonacci(index)
if index <= 1
index
else
compute_fibonacci(index - 1) + compute_fibonacci(index - 2)
end
end
def compute_lucas(index)
if index <= 1
2
elsif index == 2
1
else
compute_lucas(index - 1) + compute_lucas(index - 2)
end
end
def series(sequence, index)
case sequence
when "fibonacci" then compute_fibonacci(index)
when "lucas" then compute_lucas(index)
else compute_fibonacci(index) + compute_lucas(index)
end
end

Лог от изпълнението

............

Finished in 0.02487 seconds
12 examples, 0 failures

История (2 версии и 5 коментара)

Гюлджан обнови решението на 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.

Пробва ли синтаксиса с 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...).

Гюлджан обнови решението на 14.10.2014 20:32 (преди над 10 години)

def compute_fibonacci(index)
if index <= 1
- return index
+ index
else
- number = compute_fibonacci(index - 1) + compute_fibonacci(index - 2)
+ compute_fibonacci(index - 1) + compute_fibonacci(index - 2)
end
- number
end
def compute_lucas(index)
if index <= 1
- return 2
+ 2
elsif index == 2
- return 1
+ 1
else
- number = compute_lucas(index - 1) + compute_lucas(index - 2)
+ 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)
+def series(sequence, index)
+ case sequence
+ when "fibonacci" then compute_fibonacci(index)
+ when "lucas" then compute_lucas(index)
+ else compute_fibonacci(index) + compute_lucas(index)
end
end