Size: a a a

2020 August 27

Е

Евгений in pro.elixir
В первом варианте вроде одни и теже числа по нескольку раз не вычисляются
источник

LL

Lama Lover in pro.elixir
Евгений
А почему 2^n?
Подумой
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Евгений
В первом варианте вроде одни и теже числа по нескольку раз не вычисляются
Вычисляются конечно же
источник

Е

Евгений in pro.elixir
Да, вы правы
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Померяй факториал
источник

LL

Lama Lover in pro.elixir
Źmićer Rubinštejn
Померяй факториал
Хвостовой факториал с аккумулятором будет быстрее, я думаю
источник

Е

Евгений in pro.elixir
Ща другой пример накидаю
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Нереально померять на факториале - одно и то же
источник

Е

Евгений in pro.elixir
Lama Lover
Хвостовой факториал с аккумулятором будет быстрее, я думаю
А вот и нихрена :)))))
источник

Е

Евгений in pro.elixir
У меня хвостовая чуть-чуть медленнее
источник

Е

Евгений in pro.elixir
defmodule Fact do
 def calc(1), do: 1
 def calc(n), do: calc(n-1) * n
end

defmodule FactTail do
 def calc(1), do: 1
 def calc(n), do: calc(n, 1)
 def calc(1, n1), do: n1
 def calc(n, n1), do: calc(n - 1, n * n1)
end
источник

Е

Евгений in pro.elixir
но возможно это что-то другое
источник

Е

Евгений in pro.elixir
а так, соточку мгновенно считает
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Name           ips        average  deviation         median         99th %
body         0.164         6.10 s     ±0.00%         6.10 s         6.10 s
tco          0.161         6.22 s     ±0.00%         6.22 s         6.22 s

Comparison:
body         0.164
tco          0.161 - 1.02x slower +0.115 s
источник

ŹR

Źmićer Rubinštejn in pro.elixir
На уровне погрешности
источник

Е

Евгений in pro.elixir
:timer.tc(Fact, :calc, [1000])
{708, 402...}

:timer.tc(FactTail, :calc, [1000])
{815, 402...}
источник

Е

Евгений in pro.elixir
подозреваю, что хитрозадый beam оптимизирует таки и обычную рекурсию в случае с факториалом
источник

Е

Евгений in pro.elixir
насчет аккумулятора мапы - допустим просто подсчет количества повторов в списке и запоминание в мапе %{элемент => кол-во повторов}
источник

Е

Евгений in pro.elixir
можно хвостовой, а можно и обычной
источник

ŹR

Źmićer Rubinštejn in pro.elixir
И как это сделать обычной?
источник