sub divide { my $mid = @_/2; $ITER++; return if @_ == 1; divide(@_[0 .. $mid - 1]); divide(@_[$mid .. $#_]); } for (10 .. 30) { $ITER = 0; divide(1 .. $_); printf "%2d %2d\n", $_, $ITER; } #### T(1) = 1 T(2) = 1 + 2*T(1) T(4) = 1 + 2*T(2) ... T(N) = 1 + 2*T(N/2) #### T(N) = 1 + 2*T(N/2) = 1 + 2*(1 + 2*T(N/4)) = 1 + 2 + 4*T(N/4) --> = 3 + 4*T(N/4) = 3 + 4*(1 + 2*T(N/8)) = 3 + 4 + 8*T(N/8) --> = 7 + 8*T(N/8) = 7 + 8*(1 + 2*T(N/16)) = 7 + 8 + 16*T(N/16) --> = 15 + 16*T(N/16) #### T(N) = 2^k - 1 + 2^k * T(N / 2^k) = 2^(log N) - 1 + 2^(log N) * T(N / 2^log(N)) = N - 1 + N * T(N/N) = N - 1 + N * 1 = 2*N - 1