1
3
那个错误阻止你进入一个永不结束的循环。您可以改用此函数,但是,使用1e+56或更高版本可能永远不会结束…
|
2
1
跟进@c_©sararquero的答案,就“避免递归”这一部分而言,这是很好的,但实际上并不能解决问题的根源——浮点不精确。这些问题可能会影响递归和非递归实现:您需要(1)重新构造问题以避免不精确性;(2)设置最大迭代次数以避免无限循环结果;或(3)使用更高精度的算法(例如。
如下所示,对于大值 不 进入无限循环需要500次迭代,因此1447次迭代的崩溃(在上面@ruibarradas的注释中提到)可能来自无限循环。 下面是@c_©sararquero函数的增强版本,它设置了最大迭代次数并打印出有关进度的信息:
对于100,一切看起来都是合理的——猜测与答案之间的距离平滑地收敛到容忍度。
如果我们使用更大的论据(尽管我们仍然得到了正确的答案),事情看起来更有问题:
同样地…
在1e54和1e56之间的某个地方,我们切换到一个无限循环(或者一个如果我没有施加最大迭代次数的话将是无限的循环)。
我还没有花时间去弄清楚数值下溢问题是如何工作的:一般的想法是,如果我们试图加上/减去非常不同量级的项,我们将得到下溢。特别地,
我做了一些数值实验;我们没有 总是 陷入循环。
|
jkfe · 为什么println会在这段递归代码中执行? 2 年前 |
Jimmy · 这种算法怎么能按顺序遍历树“爬上”树呢? 2 年前 |
AvirukBasak · gcc中无return语句的尾部递归 2 年前 |
Dharmik Patel · 使用python递归完全可以整除 2 年前 |
W.tan · 一维最短距离递归算法 2 年前 |
ncarrawa · 将1添加到i(递归)时出现类型错误 2 年前 |
Eren · Python递归何时返回[duplicate] 2 年前 |