这个循环会以数学方式运行多少次?

时间:2015-10-07 22:48:28

标签: loops math count

while ( n > 0 ) {
    n = n/2 ;
}

这是一个数学问题。 每个答案都非常感谢。 和平。

4 个答案:

答案 0 :(得分:1)

如果n是一个整数,/1 / 20的整数除法运算符,那么循环将执行以下任一操作:

  • 如果n最初< = 0,它将运行0次。
  • 如果n为正,它将精确运行floor(log2(n)) + 1次,其中log2nlog(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;
}