ruby用牛顿逼近发求平方根,栈溢出问题。

ruby用牛顿逼近发求平方根,栈溢出问题。

SICP 1.1.7示例,用牛顿无限逼近法求算数平方根,原题用Scheme实现,我改写成ruby实现:

如果对x的平方根有一个猜测y,只需要求出y和x/y的平均值,它更接近实际的平方根值,重复这个过程,会得到一个不断被改进的值y使它足够接近x的平方根,当这个y的平方与x之间的误差小于某个事先确定的误差值,即得到x的平方根y。

[Copy to clipboard] [ - ]
由于是递归算法,会占用很大的堆栈空间。而堆栈空间一般是有个固定大小的,超过这个大小就会出错。

你可以加入写print语句看看程序有没有问题,如果没问题也许你只能把good_enough?里要求的精确度调小点了。
自己接招 :-D

谢谢yawl大哥建议,真正原因是ruby数字类型的精度问题,需要将Fixnum装换为Float类型
贴上修正后的代码:

[Copy to clipboard] [ - ]
不错, SICP好书阿.
示例不错
ruby 1.8没有尾递归
据说1.9有
这样此例中的堆栈问题就不存在了