Scala:递归和堆栈溢出错误
Scala: recursion and stack overflow error
我正在尝试做以下练习:
定义一个递归函数 inteDef 逼近函数的定积分 f 区间 [a,b] 使用复合梯形法则。该函数将 eps 作为参数,它标记了区间 [a,b] 将被划分的子区间的最大长度。因此,如果 [a,b] 的长度小于或等于 eps, 函数将 return
相应梯形的面积。否则,它将区间 [a,b] 分成两个相同长度的子区间(原始区间的一半)并且递归地逼近两个区间的积分和return他们的总和。
我的解决方案尝试是:
def inteDef(f: Double => Double, x: Double, y: Double, eps: Double): Double = {
if (abs(y - x) <= eps)
(y - x) * (f(x) + f(y)) / 2.0
else
inteDef(f, x, (y-x)/2.0, eps) + inteDef(f, (y-x)/2.0, y, eps)
}
当 eps 大于或等于 abs(y - x) 时有效,否则会出现堆栈溢出错误。
(y - x) / 2.0
不在 x
和 y
之间。
(x + y) / 2.0
是.
我正在尝试做以下练习:
定义一个递归函数 inteDef 逼近函数的定积分 f 区间 [a,b] 使用复合梯形法则。该函数将 eps 作为参数,它标记了区间 [a,b] 将被划分的子区间的最大长度。因此,如果 [a,b] 的长度小于或等于 eps, 函数将 return 相应梯形的面积。否则,它将区间 [a,b] 分成两个相同长度的子区间(原始区间的一半)并且递归地逼近两个区间的积分和return他们的总和。
我的解决方案尝试是:
def inteDef(f: Double => Double, x: Double, y: Double, eps: Double): Double = {
if (abs(y - x) <= eps)
(y - x) * (f(x) + f(y)) / 2.0
else
inteDef(f, x, (y-x)/2.0, eps) + inteDef(f, (y-x)/2.0, y, eps)
}
当 eps 大于或等于 abs(y - x) 时有效,否则会出现堆栈溢出错误。
(y - x) / 2.0
不在 x
和 y
之间。
(x + y) / 2.0
是.