F#在计算无穷系列和时获取堆栈溢出
F# Get stack overflow while counting infinite sum of series
我做了一个无限计数的程序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
值调用函数,代码将进入无限循环。问题是你在每一步中都从 max
中减去 1.0
,但最后你只检查它是否等于 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)
我做了一个无限计数的程序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
值调用函数,代码将进入无限循环。问题是你在每一步中都从 max
中减去 1.0
,但最后你只检查它是否等于 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)