“我们不需要按照任何特定顺序枚举分数,我们只需要确保只要循环继续运行,最终将构造每个有理数。那么:
for i=0 to infinity
for j=1 to i
display i/j
next j
next i
你应该能够看到,如果等待的时间足够长,最终会显示每一部分。事实上,由于相同的术语,如1 / 2,2 / 4,我们生成每个分数无限次。 4/8等等......“
为什么输出是1/2,2 / 4等等?我无法弄清楚:((将这个伪代码翻译成C或C ++语言,也许我说得不对:
#include <stdio.h>
int main()
{
for (int i = 0; i < 100000000000000000; i++) {
for(int j = 1; j < i; j++) {
printf("%f\n", (float)(i/j));
}
}
return 0;
}
答案 0 :(得分:4)
i/j
返回整数结果(然后将其转换为float
)。
更改
(float)(i/j)
到
((float)i)/j
此外,根据您平台上int
类型的范围,100000000000000000
可能太大而无法容纳int
。
答案 1 :(得分:2)
我假设你引用了这句话:
事实上,我们正在无限次地生成每个分数 因为相同的术语,如1 / 2,2 / 4。 4/8等等......“
这并不是说输出是1 / 2,2 / 4,4 / 8。它只是说任何特定的分数,例如1/2,在输出中出现无限次。即1/2 == 2/4 == 4/8 == ......等等。