Решение на Първа задача от Божидар Григоров

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

Към профила на Божидар Григоров

Резултати

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

Код

def series(type, number)
case type
when 'fibonacci' then fibonacci(number)
when 'lucas' then lucas(number)
else
fibonacci(number) + lucas(number)
end
end
def fibonacci(number)
return 1 if number <= 2
recursion(number, "fibonacci")
end
def lucas(number)
return 1 if number == 2
return 2 if number == 1
recursion(number, "lucas")
end
def recursion(number, type)
case type
when "lucas" then lucas(number - 2) + lucas(number - 1)
when "fibonacci" then fibonacci(number - 1) + fibonacci(number - 2)
end
end

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

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

Finished in 0.05134 seconds
12 examples, 0 failures

История (3 версии и 1 коментар)

Божидар обнови решението на 13.10.2014 23:33 (преди около 10 години)

+def series(type, number)
+
+ if type == 'fibonacci'
+ fibonacci(number)
+ elsif type == 'lucas'
+ lucas(number)
+ else
+ return fibonacci(number) + series("lucas",number)
+ end
+end
+
+def fibonacci(number)
+ return 1 if number <= 2
+ return fibonacci(number-1) + fibonacci(number-2)
+end
+
+def lucas(number)
+ return 1 if number == 2
+ return fibonacci(number-2) + fibonacci(number)
+end
  • Ред 2 е излишен.
  • Индентацията на ред 4 не е добре.
  • В руби функциите връщат стойността на последния остойностен израз. Т.е можеш да махнеш return-ите които са последни и не използваш за да прекратиш преждевременно функцията.
  • Оставяй място след запетая, и около оператори като -, +, == и т.н. Може да разгледаш style guide-a.
  • Не ползвай fibonacci за да смяташ lucas. Използваш някаква зависимост между членовете на редицата на Фибоначи и Лукас, която натоварва излишно. Ако поискам редица с други начални стойности, ще трябва да напишеш нова функция, и да мислиш нова зависимост между двете редици. Няма да подаваме други начални стойности и въобще не е задължително да се имплементира такава фунцкионалност, но просто искам да ти покажа недостатъците на решението ти.

    Рекурентната зависимост и за двете редици е еднаква. Можеш да извадиш тази логика в отделна функция, и да преизползваш нея за fibonacci и lucas.

  • Разгледай case конструкцията, използвайки я series ще стане по-четима.

Божидар обнови решението на 15.10.2014 12:48 (преди около 10 години)

def series(type, number)
-
- if type == 'fibonacci'
- fibonacci(number)
- elsif type == 'lucas'
- lucas(number)
+ case type
+ when 'fibonacci' then fibonacci(number)
+ when 'lucas' then lucas(number)
else
- return fibonacci(number) + series("lucas",number)
+ fibonacci(number) + lucas(number)
end
end
def fibonacci(number)
return 1 if number <= 2
- return fibonacci(number-1) + fibonacci(number-2)
+ recursion(number, "fibonacci")
end
def lucas(number)
return 1 if number == 2
- return fibonacci(number-2) + fibonacci(number)
+ return 2 if number == 1
+ recursion(number, "lucas")
+end
+
+def recursion(number,type)
+ case type
+ when "lucas" then lucas(number - 2) + lucas(number - 1)
+ when "fibonacci" then fibonacci(number - 1) + fibonacci(number - 2)
+ end
end

Божидар обнови решението на 15.10.2014 12:50 (преди около 10 години)

def series(type, number)
case type
when 'fibonacci' then fibonacci(number)
when 'lucas' then lucas(number)
else
fibonacci(number) + lucas(number)
end
end
def fibonacci(number)
return 1 if number <= 2
recursion(number, "fibonacci")
end
def lucas(number)
return 1 if number == 2
return 2 if number == 1
recursion(number, "lucas")
end
-def recursion(number,type)
+def recursion(number, type)
case type
when "lucas" then lucas(number - 2) + lucas(number - 1)
when "fibonacci" then fibonacci(number - 1) + fibonacci(number - 2)
end
-end
+end