x = m; y = 1; while (x - y > e) { x = (x + y) / 2; y = m / x; } print(x);求取时间复杂度?

x = m;
y = 1;
while (x - y > e)
{
x = (x + y) / 2;
    y = m / x;
}
print(x);

A:log m
B:m的平方
C:m的1/2方
D:m的1/3方
解析:
1.x=(x+y)/2=(m+1)/2 m非常大,则 x=m/2;
y=m/x, x=m/2 则 y=2;

2.x=(x+y)/2=(m/2+2)/2=m/4+1 m非常大,则 x=m/4;
y=m/x, x=m/4 则 y=4; 

3.x=(x+y)/2=(m/4+4)/2=m/8+2 m非常大,则 x=m/8;
y=m/x, x=m/8 则 y=8;

.........

x=m/(2的n次方),y=2的n次方
当x-y=m/(2的n次方)-2 的n次方=0时 m/(2的n次方) -2 的n次方=0 m=2的2n次方 => n=(logm)/2

你可能感兴趣的:(面试题)