问题描述
我制作了一个程序来计算无穷sum of series 但出现错误:堆栈溢出。请帮助
let sum_series (max : float) =
let rec f (a:float,x : float) =
match x with
| 0. -> a
| x -> f ((1. / (x * x) + a),x - 1.)
f (0.,max)
[<EntryPoint>]
let main args =
let (b,max) = System.Double.TryParse(args.[0])
printfn "%A" (sum_series max)
0
解决方法
如果您使用不是整数的max
值调用函数,则代码将陷入无限循环。问题是您在每一步中都从1.0
中减去max
,但是最后只检查它是否等于0.0
。如果您以0.1
开头,则下一个值为-0.9,-1.9,-2.9
等。
您是否只想检查x
小于0.0
的情况?您可以将match
更改为普通的if
(这使它更简单)并使用:
let sum_series (max : float) =
let rec f (a:float,x : float) =
if x < 0. then a
else f ((1. / (x * x) + a),x - 1.)
f (0.,max)