我有一个小问题:我想用OCaml解决this problem
所以我尝试了->

-> let rec somme x = if ( nor (bool_of_int (x mod 3)) (bool_of_int (x mod 5))) then x + (somme x-1) else (somme x-1) ;;

val somme : int -> int = <fun>

-> somme 1000 ;;

Stack overflow during evaluation (looping recursion?).


我做错了什么?



我尝试过的新代码:

let somme2 x = if (( nor (bool_of_int (x mod 3)) (bool_of_int (x mod 5)))) then x + somme (x-1) else somme (x-1) ;;

let somme x = if x = 0 then x else somme2 x ;;


同样的错误。

最佳答案

1)您的回馈永远不会停止,在开始时添加if x == 0 then 0 else ...之类的测试

2)您不要在x-1上加上括号,因此ocaml读取(somme x)-1。改写somme (x-1)

07-26 00:28