0

我正在制作一个简单的程序,将所有数字相加为 n。我很好奇为什么我在 n-1 上不使用括号时会出现堆栈溢出,而当我使用它们时却没有。

let rec summing n=
  if n=0
  then 0 
  else n+ summing n-1;; (*(n-1)*)
summing 5;;

4

1 回答 1

3

我怀疑没有括号的操作顺序:

n+ summing n-1

暗示如下:

(n) + (summing n) - (1)

n这意味着始终递归传递相同的值,直到堆栈溢出。n - 1显式使用括号允许您递归传递。

于 2021-06-21T13:30:30.553 回答