F#计算无穷级数和时获得堆栈溢出
我做了一个数无穷的程序 但是得到一个错误:堆栈溢出。请帮忙F#计算无穷级数和时获得堆栈溢出,f#,stack-overflow,F#,Stack Overflow,我做了一个数无穷的程序 但是得到一个错误:堆栈溢出。请帮忙 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 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
let sum_系列(最大:浮点)=
设rec f(a:float,x:float)=
将x与
| 0. -> A.
|x->f((1./(x*x)+a),x-1。)
f(0,最大值)
[]
让主参数=
let(b,max)=System.Double.TryParse(args.[0])
打印fn“%A”(最大和系列)
0
如果使用非整数的max
值调用函数,代码将进入无限循环。问题是,在每一步中,您都要不断从max
中减去1.0
,但最后只检查它是否等于0.0
。如果以0.1
开头,则下一个值将是-0.9,-1.9,-2.9
等
您是否只想检查x
小于0.0
时的情况?您可以将匹配更改为普通的(如果
(这会使操作更简单)并使用:
let sum_系列(最大:浮点)=
设rec f(a:float,x:float)=
如果x<0。然后
否则f((1./(x*x)+a),x-1。)
f(0,最大值)
是否所有输入都会溢出?你能给它一个溢出的输入,你认为不应该吗?而且,它看起来是设计用来处理整数值x的,因为你将x减1,当x为0时停止。如果是这样,您应该键入x作为int。如果不是,您应该更改停止条件