-module(collatz_kakutani). -export([main/0]). step(1, Step) -> Step; step(Num, Step) -> case Num rem 2 of 0 -> step(Num div 2, Step + 1); 1 -> step(3 * Num + 1, Step + 1) end. max_step(1, MaxNum, MaxStep) -> [MaxNum, MaxStep]; max_step(Num, MaxNum, MaxStep) -> TmpStep = step(Num, 0), if TmpStep > MaxStep -> max_step(Num - 1, Num, TmpStep); true -> max_step(Num - 1, MaxNum, MaxStep) end. main() -> io:format("f(~B) = ~B~n", max_step(1 bsl 20, 1, 1)).