如何解决OCAML赔率之和
我有一些用Ocaml编写的代码
let rec sumodds n =
if (n mod 2)<>0 then
let sum = sumodds (n-1) in
n + sum
else sumodds(n-1);;
,并且我试图将0到n之间的所有奇数加起来,但是我不确定如何在n达到零时停止程序。如果我能得到一些帮助,那就太好了。如果程序中还有其他错误,请随时让我知道它们是什么。
解决方法
使功能停止的方法是测试“停止条件”。也就是说,您需要添加一条if
语句,以测试您是否已经达到了如此低的n值,以至于结果显而易见。
通常,递归函数看起来像这样:
let rec myfun arg =
if is_trivial_value arg then
obvious_answer
else
let s = myfun (smallish_part_of arg) in
combine arg s
您只需为参数n
的平凡值添加一个检验。
更新
正如@Goswin_von_Brederlow指出的,递归函数的另一个非常常见的模式是:
let rec myfun2 accum arg =
if is_trivial_vaue arg then
accum
else
myfun2 (combine arg accum) (smallish_part_of arg)
这是上述形式的尾部递归转换。您可以使用任何一种形式进行编码,但是它们是不同的。因此,您需要牢记它们。作为FP程序员,您需要(并且将很容易地)学会在两种形式之间进行翻译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。