越来越觉得erlang是个好工具,天生的符号抽象能力,几乎和scheme不相上下
pow(D, N) ->
pow_iter(normalize(D), D, N).
pow_iter(R, _, 0) ->
R;
pow_iter(R, D, N) ->
case N rem 2 of
1 ->
pow_iter(mul(R, D), D, N - 1);
0 ->
pow_iter(R, mul(D, D), N div 2)
end.
normalize([[_X11, _X12],[_X21, _X22]]) ->
[[1,0],[0,1]];
normalize([_X,_Y]) ->
[1,1];
normalize(_) ->
1.
mul([[X11, X12],[X21, X22]],[[Y11,Y12],[Y21, Y22]]) ->
[[X11 * Y11 + X12 * Y21, X11 * Y12 + X12 * Y22],
[X21 * Y11 + X22 * Y21, X21 * Y12 + X22 * Y22]];
mul([X1,Y1], [X2,Y2]) ->
X1 * Y2 - X2 * Y1;
mul(A, B) ->
A * B.
fib(N) when N > 0 ->
[[F,_],[_,_]] = pow([[1,1],[1,0]], N - 1),F;
fib(_) ->
0.
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8