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

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

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

Резултати

  • 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.

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