int count=0;
do
{
count++;
n=n/2;
} while (n>1);
我在这里看到模式时遇到了麻烦,即使插入n的数字然后绘制出每个基本操作。提前谢谢!
编辑:我想要最糟糕的情况。
答案 0 :(得分:2)
第一步是将n
与2
分开。所以你得到n/2
。现在,您再次使用2
将其除以n/2 > 1
,然后获得n/4
。如果n/4 > 1
再次执行此操作,并且您获得n/8
,或者更好地将其写为n/(2^3)
...现在如果n/(2^3) > 1
再次执行此操作,您将获得n/(2^4)
{1}} ...因此,如果您执行k
次,则会获得n/(2^k)
。如何计算k
以获得n/(2^k) ≤ 1
?易:
n/(2^k) ≤ 1
n ≤ 2^k
ln(n) ≤ k
因此,您的算法需要O(ln(n))
次迭代才能退出循环。
在您的代码中,k
为count
。