use*_*674 3 syntax recursion ocaml
这是我的代码:
let rec sum n =
if n <= 0 then 0
else if n / 2 * 2 = n then 3 * n + 50 * (sum n-2)
else n + 10 * (sum n-1);;
Run Code Online (Sandbox Code Playgroud)
数学问题简单如下:
sn =
0 if n = 0
50*sn-2 + 3*n, if n > 0 and n is even
10*sn-1 + n , if n > 0 and n is odd
Run Code Online (Sandbox Code Playgroud)
当我测试时sum 5,它弹出"堆栈溢出"错误,如下所示:
评估期间堆栈溢出(循环递归?).
任何人都可以帮我吗?
添加括号:
let rec sum n =
if n <= 0 then 0
else if n / 2 * 2 = n then 3 * n + 50 * (sum (n-2))
else n + 10 * (sum (n-1));;
(* prints 3125 *)
print_int (sum 5);;
Run Code Online (Sandbox Code Playgroud)
而不是调用的sum上n-2(或n-1),那么你就调用它n减去2(或1)从结果.由于输入永远不会改变,它会递归直到它溢出堆栈.