小编Bom*_*ori的帖子

为什么计算斐波纳契数需要很长时间?

我几天前开始学习Ocaml.我试图制作一个fibonaaci数字程序:

  let rec fib a=
      if a=1||a=2 then 1 else fib(a-1)+fib(a-2);;
Run Code Online (Sandbox Code Playgroud)

这段代码不是最优的,因为我不知道如何处理异常情况.但就目前而言,如果我尝试计算fib 50或fib 100,那么计算机需要很长时间才能进行评估.我想知道为什么,因为Ocaml应该非常快,并且添加数字显然是线性时间任务.如果我将此代码粘贴到"Try Ocaml"(http://try.ocamlpro.com/)中,那么当我执行fib 50时整个网站会冻结.

对不起,如果问题的级别太低.

ocaml

3
推荐指数
1
解决办法
2899
查看次数

如何在OCaml中汇总浮点数列表

我对我的代码感到困惑:

let sum l = match l with
  | [] -> 0.0
  | h::t -> h +. (sum t);;
Run Code Online (Sandbox Code Playgroud)

它应该给我列表中的数字总和.但是,当我检查代码时,我发现第二个代码在使用长度大于或等于7的列表时崩溃.这是代码:

# sum [0.;1.;2.;3.;4.;5.;]

- : float = 15.

# sum [0.;1.;2.;3.;4.;5.;6.]

- : float = 21.
# sum [0.;1.;2.;3.;4.;5.;6.;7.]

- : float = 21.
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,因为对int进行操作的修改结果是正常的:

let rec sumf l = match l with
  | []-> 0.0
  | h::t-> (float_of_int h) +. sumf t;;
Run Code Online (Sandbox Code Playgroud)

除了我在第二个代码中将int转换为float之外,我不知道两者之间的本质区别是什么.

ocaml

1
推荐指数
2
解决办法
9317
查看次数

标签 统计

ocaml ×2