【发布时间】:2019-06-26 14:22:46
【问题描述】:
我需要递归地将一个数字减半并进行分段。直到段的长度小于1;前任。当数字为 15 时,我们将拥有:
0,15 ==> 1 segment, length = 15
0,7.5,15 ==> 2 segments, length = 7.5
0,3.75,7.5,11.25,15 ==> 4 segments, length = 3.75
0,1.875,3.75,5.625,7.5,9.375,11.25,13.125,15 ==> 8 segments, length = 1.875
0,0.9375,1.875, ..... ,13.125,14.0625,15 ==> 16 segments, length = 0.9375
到目前为止,我可以通过如下简单的代码来做到这一点:
double delta = N; //N being the input number
while(delta > 1.0)
delta /= 2.0;
int count = (N / delta) + 1;
var series = Enumerable.Range(0, count).Select(x => x * delta).ToArray();
有没有更好的办法?
【问题讨论】:
-
在什么意义上更好?
-
@500-InternalServerError 更好的算法。
-
“更好”太模糊了。您正在寻找什么样的改进,性能多功能性、风格(基于意见),......?
-
我不明白递归在您的“递归”解决方案中的位置;你可以解释吗?这是一个迭代解决方案,而不是递归解决方案。
-
@EricLippert 或
Math.Log(N,2)对于我们这些尚未使用 .Net Core 的人 :)