Решение на Първа задача от Даниела Иванова

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

Към профила на Даниела Иванова

Резултати

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

Код

def fibonacci(n)
if n == 0
return 0
elsif n == 1
return 1
else
fibonacci(n - 1) + fibonacci(n - 2)
end
end
def lucas(n)
if n == 1
return 2
elsif n == 2
return 1
else
lucas(n - 1) + lucas(n - 2)
end
end
def series(sequence_name,n)
if sequence_name == 'fibonacci'
return fibonacci(n)
elsif sequence_name == 'lucas'
return lucas(n)
else
return fibonacci(n) + lucas(n)
end
end

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

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

Finished in 0.02688 seconds
12 examples, 0 failures

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

Даниела обнови решението на 14.10.2014 11:15 (преди около 10 години)

+def fibonacci(n)
+ return n if(0..1).include? n
+ (fibonacci(n-1)+fibonacci(n-2))
+end
+def lucas(n)
+ return n+1 if(n == 1)
+ return n-1 if(n == 2)
+ (lucas(n-1)+lucas(n-2))
+end
+def series(seq , n)
+ return fibonacci(n) if (seq == 'fibonacci')
+ return lucas(n) if (seq == 'lucas')
+ return lucas(n) + fibonacci(n) if (seq == 'summed')
+end

Даниела обнови решението на 14.10.2014 11:19 (преди около 10 години)

def fibonacci(n)
- return n if(0..1).include? n
- (fibonacci(n-1)+fibonacci(n-2))
+ return n if (0..1).include? n
+ (fibonacci(n - 1) + fibonacci(n - 2))
end
+
+
def lucas(n)
- return n+1 if(n == 1)
- return n-1 if(n == 2)
- (lucas(n-1)+lucas(n-2))
+ return n + 1 if (n == 1)
+ return n - 1 if (n == 2)
+ (lucas(n - 1) + lucas(n - 2))
end
+
+
def series(seq , n)
- return fibonacci(n) if (seq == 'fibonacci')
- return lucas(n) if (seq == 'lucas')
+ return fibonacci(n) if (seq == 'fibonacci')
- return lucas(n) + fibonacci(n) if (seq == 'summed')
+ return lucas(n) if (seq == 'lucas')
-end
+ return lucas(n) + fibonacci(n) if (seq == 'summed')
+end
  • Имаш известно количесто проблеми с конвенциите (главно индентация и скоби). Погледни style guide-a, за да ги адресираш.
  • Не спестявай символи за сметка на четимост. Какъв беше смисълът да го съкратиш до seq? Също ако е съкращение от sequence e малко подлъгващо, все пак не ви даваме редица, а име на редица.
  • Обикновено return x if y синтаксиса се използва за изключения. Може да се каже, че дъното на рекурсията е такова. В тези случаи ги отделяй от главната логика в метода с един празен ред, за да бъде по-ясно. series обаче не спада в тази категория. По-добре го пренапиши с case или обикновен if - elsif - else.
  • Препочитай ясен код пред по-хитър такъв. Възможно е да ти звучи тривиално, но n + 1 и n - 1 не е напълно очевидно. Защо не числата 2 и 1?
  • (x..y) и (x...y) по принцип вървят ръка за ръка с when или ===. В другите ситуации предпочитай x.upto(y). Точно тук дори не ти трябва Range. За две стойности можеше спокойно да сложиш масив или да сравниш директно.

Даниела обнови решението на 14.10.2014 21:06 (преди около 10 години)

def fibonacci(n)
- return n if (0..1).include? n
- (fibonacci(n - 1) + fibonacci(n - 2))
+ if n == 0
+ return 0
+ elsif n == 1
+ return 1
+ else
+ fibonacci(n - 1) + fibonacci(n - 2)
+ end
end
def lucas(n)
- return n + 1 if (n == 1)
- return n - 1 if (n == 2)
- (lucas(n - 1) + lucas(n - 2))
+ if n == 1
+ return 2
+ elsif n == 2
+ return 1
+ else
+ lucas(n - 1) + lucas(n - 2)
+ end
end
-def series(seq , n)
- return fibonacci(n) if (seq == 'fibonacci')
- return lucas(n) if (seq == 'lucas')
- return lucas(n) + fibonacci(n) if (seq == 'summed')
+def series(sequence_name,n)
+ if sequence_name == 'fibonacci'
+ return fibonacci(n)
+ elsif sequence_name == 'lucas'
+ return lucas(n)
+ else
+ return fibonacci(n) + lucas(n)
+ end
end