package main import fmt func main var sum использование глобальной пер

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main
import "fmt"
func main() {
var sum = 1 // использование глобальной переменной - почитать почему плохо
var x func(a int) // функцию невозможно использовать где-либо кроме main, почитать про DRY и все такое
x = func (a int) { // очень странное решение, main это точка запуска, а не блок всего кода - должно быть в отдельной функции
if a <= 0 { // a <= 1 | зачем считать факториал от 1 если это тоже самое что и от нуля
return // return 1 | ошибка - нужно учитывать пограничные значения. факториал от нуля не ноль
}
sum = sum * a // return a * x(a-1) - превращая 1 строчку в 3 код становится длинее и сложнее читать
a = a - 1
x(a) // почитать про стек вызовов, чем чревата рекурсия, почему лучше считать через цикл (это уже не джуниор уровень - просто полезно)
}
x(3) // вычисляем тут, а сохраняем куда-то в другое место - зачем ?
fmt.Println(sum) // а теперь еще раз повторяем обе строчки и факториал от 3 будет равен 36 - серьезная ошибка, которую и тест может не поймать
}
// на выходе:
// 1. код абсолютно не тестируемый
// 2. неправильно считает от нуля - всегда нужно обрабатывать пограничные значения
// 3. второй запуск выдаст неправильный результат
// 4. нельзя одновременно запускать из 2+ горутин
// если что-то непонятно (например, не знаешь что такое факториал от нуля) - то нужно уточнить/спросить/поглядеть в интернете
// но никак не решать задачу не зная что ожидается
// задача посчитать факториал, выдать n'ое число Фибоначчи - это уровень джуниора и ошибок в таких простых алгоритмах не должно быть
// 15 минут на решение многовато, но это уже придирка