while ( n > 0 ) {
n = n/2 ;
}
这是一个数学问题。 每个答案都非常感谢。 和平。
答案 0 :(得分:1)
如果n
是一个整数,/
是1 / 2
为0
的整数除法运算符,那么循环将执行以下任一操作:
n
最初< = 0,它将运行0次。n
为正,它将精确运行floor(log2(n)) + 1
次,其中log2
是n
(log(n) / log(2)
)的二进制对数。这恰好与存储n
所需的位数完全相同,这不是巧合。答案 1 :(得分:0)
什么是n
?
在我的例子中,它是一个C ++类,如:
class MyN {
public:
bool operator > (int) const { return true; }
MyN & operator / (int) { return *this; }
}
......永远。
但是如果我们将n
作为一个向0舍入的整数类型,那么:
n
小于或等于0
floor( log2 n ) + 1
次。答案 2 :(得分:0)
从虚构抽象(数学)的角度来看,它会永远运行,但这不是一个有用的信息:)
根据真实客观世界,
Xenonesque视图:循环将一直运行直到阿基里斯捕获乌龟。
Democritusesque视图:循环将一直运行,直到对象的数量变化(数字 - 作为一个数学对象)将是定量转换的一步 - 改变这个对象的本质。更多的变化不能被我们的意识所感知,至少在初始对象的背景下,所以最好停在这里并命名最后一个可分割的对象,原子序数。
CSesque视图:直到解释器/编译器将该除法评估为零。
对于python 2.7,应用以下函数
def steps_to_zero(n, i=0):
while n>0:
n = n/2.0
i+=1
return i
到范围,(部分从1到10 ** 308),最小值是1075,最大值2098.因此,在范围上增加10倍只能将迭代次数提升3次。
答案 3 :(得分:-2)
如果n是整数,那么循环将运行23次。如果您需要证明或工作细节,请通知我。
我在c ++中测试它是一个整数,这就是我得到23的方式。似乎我没有正确地得到问题。下面是我使用的代码:
#include <iostream>
using namespace std;
int main()
{
int n;
int x = 0;
while ( n > 0 )
{
cout << n << endl;
x++;
n = n/2 ;
}
cout << "Amount of times loop is: " << x << endl;
return 0;
}