Числа Фибоначчи
Aug. 22nd, 2019 10:14 amОпустим тот факт, что числа Фибоначчи являются хрестоматийной рекуррентной последовательностью. В конце концов, не все учились в физматшколах, не все читали математический научпоп, не у всех была алгебра в вузе.
Но я уже на третьем собесе подряд вижу в резюме Python (в одном случае даже какие-то курсы) и на третьем же собесе подряд человек смотрит на задачу посчитать N-ое число Фибоначчи, как баран на новые ворота. Один из трех вообще отказался, заявив, что он-де, "автоматизировал, но не программировал".
Я понимаю, что мы берем не программера, я не гвалтую людям мозг задачами вроде: "напишите mergesort", "разверните односвязный список" или "проверьте такое-то свойство дерева". Но, е-мое, рекурсивная реализация чисел Фибоначчи пишется в пять строк с одним if-elif-else; итеративная - в восемь строк с одним циклом. Функционально, наверное, можно в одну строку, просто я не умею.
Даже на Хабре была статья в духе: "Десять способов посчитать числа Фибоначчи, потому что у вас про них спросят на собесе".
Вот скажите, о общественность, то, что я думаю, что любой человек, желающий "автоматизировать", должен уметь реализовать простейший прикладной алгоритм с циклом и условием - это снобизм и барство, или это все-таки разумное требование?
Тут мне жена справедливо заметила, что они в школе (обычной!) на информатике прогали на Бейсике еще и не такое - но я смутно подозреваю, что "вас же этому в школе учили" давно уже не аргумент.
Но я уже на третьем собесе подряд вижу в резюме Python (в одном случае даже какие-то курсы) и на третьем же собесе подряд человек смотрит на задачу посчитать N-ое число Фибоначчи, как баран на новые ворота. Один из трех вообще отказался, заявив, что он-де, "автоматизировал, но не программировал".
Я понимаю, что мы берем не программера, я не гвалтую людям мозг задачами вроде: "напишите mergesort", "разверните односвязный список" или "проверьте такое-то свойство дерева". Но, е-мое, рекурсивная реализация чисел Фибоначчи пишется в пять строк с одним if-elif-else; итеративная - в восемь строк с одним циклом. Функционально, наверное, можно в одну строку, просто я не умею.
Даже на Хабре была статья в духе: "Десять способов посчитать числа Фибоначчи, потому что у вас про них спросят на собесе".
Вот скажите, о общественность, то, что я думаю, что любой человек, желающий "автоматизировать", должен уметь реализовать простейший прикладной алгоритм с циклом и условием - это снобизм и барство, или это все-таки разумное требование?
Тут мне жена справедливо заметила, что они в школе (обычной!) на информатике прогали на Бейсике еще и не такое - но я смутно подозреваю, что "вас же этому в школе учили" давно уже не аргумент.
(no subject)
Date: 2019-08-22 10:40 am (UTC)(no subject)
Date: 2019-08-22 11:05 am (UTC)def fib(n): """ Return N-th Fibonacci number f(0) = 0; f(1) = 1; f(n) = f(n-1) + f(n-2) 0, 1, 1, 2, 3, 5, 8 """но почему-то имеют проблемы с реализацией.
При этом ради интереса я посмотрел некоторое число реальных говноскриптов, делающих реальные задачи: вложенный foreach с if-elif во внутреннем цикле, просто foreach, просто foreach с try-except и так далее.
В скриптах, решающих реально важные задачи, try-except, кстати, как насрано, потому как в этом контексте, увы, нет альтернативы нелюбимому мной защитному программированию.
Несколько десятков SLOC на скрипт и несколько функций - это в порядке вещей. Как в этом будет пытаться разбираться человек, который не может написать одну функцию на десяток SLOC с одним циклом и одним условным оператором - я понять не могу.
(no subject)
Date: 2019-08-22 06:35 pm (UTC)<# def fib(n):
""" Return N-th Fibonacci number
f(0) = 0; f(1) = 1; f(n) = f(n-1) + f(n-2)
0, 1, 1, 2, 3, 5, 8
"""
#>
$Fib0 = 0
$Fib1 = 1
$Fib = 0
for($i=0; $i -le 10; $i++)
{
$Fib = $Fib0 + $Fib1
$Fib0 = $Fib1
$Fib1 = $Fib
write-host $Fib
}
так чтоли ?
(no subject)
Date: 2019-08-23 09:15 am (UTC)- формально была нужна функция, и надо было вернуть только N-ое число, а не все подряд
- ты завафлил распечатать самое начало: твой вывод начнется со второго числа Фибоначчи
- Если считать, что твое N - это 10, то в цикле ты влетел в ошибку "плюс-минус один"
- нинада выводить полезный результат с помощью write-host
Но в целом подобные задачки даются для дихотомии "умеет или не умеет", а качество кода на этом не измеряется.
(no subject)
Date: 2019-08-23 09:56 pm (UTC)https://helloacm.com/learning-powershell-recursive-fibonacci-computation/
>>- нинада выводить полезный результат с помощью write-host
-
Чегойта? В файл его чтоли выводить?
(no subject)
Date: 2019-08-24 08:52 am (UTC)function fib() { # Get-FibonacciNumber :) Param( [int]$n ) ... # iterative Fibonacci implementation for ($i = 1; $i -lt $n; $i++){...} ... } ... fib(10)А что до вывода, то поскольку return считается некомильфо, то вывод надо гнать в Output через Write-Output. Поскольку если ты пишешь через write-host, то ты этот вывод конвейером в другой командлет уже не загонишь.
(no subject)
Date: 2019-08-24 07:00 pm (UTC)-
В курсе. Но я вообще не увидел в переписке задачи сделать функцию.
Посчитайте н-ное - ок, посчитал (с учетом ошибок).
(no subject)
Date: 2019-08-23 10:00 pm (UTC)- Если считать, что твое N - это 10, то в цикле ты влетел в ошибку "плюс-минус один"
-
Это да. кривенько.
(no subject)
Date: 2019-08-22 11:00 am (UTC)(no subject)
Date: 2019-08-22 11:07 am (UTC)(no subject)
Date: 2019-08-22 11:13 am (UTC)(no subject)
Date: 2019-08-28 07:34 am (UTC)