function multiply(a,b)
if b = 0 then return 0
else if b is even then
t := multiply(a, b/2);
return t+t;
else if b is odd then
t := multiply(a, b-1);
return a+t;
Следовательно:
F(0) = 0
If Even: F(N) = F(N/2) + 1
If Odd-Even: F(N) = F(N-1) + 1 = F((N-1)/2) + 2 <-next number is definitely even
Решение случая нечетного-четного-нечетного-четного (худший сценарий):
F(N) = F((N-1)/2) + 2 = O(LogN)
Еще один способ решения проблемчто мы знаем, что случай нечетно-четно-нечетно-четный имеет максимальную вдвое глубину случая четно-четно-четно-четного.Четный единственный случай имеет глубину LogN
, таким образом, случай нечетный-четный-нечетный-четный имеет не более 2*LogN
глубина.