Nikita
не, какие-то упражнения в го сильно сложные
Oleg
Хз:)
Nikita
я просто уточню, не нужно же быть математически подкованным, чтоб пользоваться го?
Nikita
ну в js мне норм
Nikita
я могу на нем в один прекрасный день написать бэк для рест апи?
Nikita
не могу понять, почему функция хоть и получает в аргументы структуру, все равно ее не может изменить?
Nikita
type Vertex struct { X, Y float64 } func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func (v Vertex) Scale(f float64) { v.X = v.X * f v.Y = v.Y * f } func main() { v := Vertex{3, 4} v.Scale(10) fmt.Println(v.Abs()) }
Oleg
С js пришел человек :)
Nikita
а без ссылки?
Nikita
почему функция обязательно должна принимать ссылку, чтоб обработать значение? Я же значение на прямую передаю
Nikita
или вы хотите мне сказать, что то что попадает в функцию это уже копия ?
Oleg
Это принято назвать указателем :) Без указателя нельзя изменять значение так, чтобы оно поменялось у вызывателя
Nikita
С js пришел человек :)
ох, теперь я понял, почему вы про это напомнили
Nikita
я так привык, что все автоматом становится ссылкой.
Oleg
ты фибоначи так и не посчитал?)
Nikita
нет
Nikita
я не знаю как это сделать
Nikita
я не слишком умен для такого, еще полгода назад я верстал и jq плагины подключал, потом я стал фронтом и начал на vue спа приложения пилить.
Nikita
а я не в печали)
Nikita
хотя, если дадите подсказку, то было бы прикольно и я бы попробовал бы ее решить
Oleg
func fib(number int) int { if number == 0 || number == 1 { return number } return fib(number-2) + fib(number-1) }
Oleg
:D
Oleg
Это рекурсивно же :)
Oleg
Проходили
Oleg
Мы то в вузе мб и проходили)
Oleg
но откуда мы знаем какой он там js-кодер?)
Oleg
хотя, если дадите подсказку, то было бы прикольно и я бы попробовал бы ее решить
Можно написать вычисление одним циклом. Хранить в двух переменных два последних значения и складывать их.
Oleg
и то кстати я встрял в рекурсии тогда, и вообще плавал на всех алгоритмах
Oleg
Мы то в вузе мб и проходили)
Я имею ввиду выше проходили, но это не подошло :)
Oleg
ам) ну да)
Nikita
я же такое же решение выдал на js, но задача состоит не передавая значений вычислить фибоначчи
Nikita
func fib(number int) int { if number == 0 || number == 1 { return number } return fib(number-2) + fib(number-1) }
кстать такой способ вызывет функцию 177 раз, если передать 10
Nikita
жесть
Oleg
кстать такой способ вызывет функцию 177 раз, если передать 10
у меня есть вариант еще 1, где он её вызовет 1 раз для каждого значения)
Oleg
жесть
О(2^n), угу :)
Oleg
а еще 1 вариант считает в big.Int, но я его не покажу тк там код авно;D
Nikita
О(2^n), угу :)
о, слышал такую фигню, но хз как это читать.
Oleg
Или скорее фи^n
Nikita
func fibonacci() func() int { var number1 = 10 var number2 = 10 return func() int { number1 -= 1 number2 -= 2 result := number1 + number2 return result; } } наверно трабла в том, что я даже не понимаю, что это должно считать
Mike
че за пиздос
Mike
при чем тут фиббоначи
Mike
почему оно функцию возвращает
Mike
втф
Nikita
Реализуйте функцию fibonacci, которая возвращает функцию (замыкание), которая возвращает последовательные числа Фибоначчи (0, 1, 1, 2, 3, 5, ...).
Mikalai
и то кстати я встрял в рекурсии тогда, и вообще плавал на всех алгоритмах
Наверное про вычисление фибоначи за O(logN) даже вспоминать тут не стоит 😁😂
Mike
func fib() func() int { cache := []int{1, 1} cur := 0 return func() int { if cur > len(cache) { appen(cache, cache[cur-1] + cache[cur-2] } cur ++ return cache[cur-1] } }
Mike
пример
Mikalai
Не могу сообразить как это
Через возведение матрицы в степень
Mike
ты еще за О(1) по формуле предложил бы
Mike
)
Mikalai
ты еще за О(1) по формуле предложил бы
Не, это не точный вариант 😁
Mike
ну такое, если взять достаточно большой флоат и округлить просто потом, мне кажется до достаточно больших чисел все совпадать будет
Oleg
Мм, мелкие тролли тут как тут:)
https://habrahabr.ru/post/148336/ Есть такое :)
Nikita
что за странное условие? cur > len(cache) ?
Mike
ну типа что мы еще не вычислили
Mike
нужный
Mike
первые два раза на самом деле только будет скипать иф
Mike
потом будет каждый раз в него заходить
Mike
так что можешь сделать if (cur > 2)
Mike
Память под весь ряд выделять? :)
я написал работающий код, а не идеальный =) можно за собой подчищать, естественно
Nikita
ну я его вставил, он не заработал
Oleg
Там в append ошибка :)
Nikita
не, я попытался исправить синтаксические
Oleg
😄
Nikita
func fibonacci() func() int { cache := []int{1, 1} cur := 0 return func() int { if cur > 2 { cache = append(cache, cache[cur-1] + cache[cur-2]) } cur ++ return cache[cur-1] } }
Anonymous
Ф = ((√5+1)/2) ⌊Ф^N / √5 - (1-Ф)^N / √5⌉
Mike
пошучено
Mike
опоздал
Oleg
ну я его вставил, он не заработал
https://play.golang.org/p/xwCuMP8IHS Вот, попробуй
Mike
https://play.golang.org/p/xwCuMP8IHS Вот, попробуй
норм, только они с 1 начинаются вроде