Recursion F#递归函数参数和堆栈溢出

Recursion F#递归函数参数和堆栈溢出,recursion,f#,Recursion,F#,我对F#有点陌生,在处理一些递归函数时,我遇到了一些奇怪的行为。我有两个不同的版本: 第1版: 这会导致堆栈溢出,尽管看起来不应该(至少在我的noob眼里) 版本2: 这一个工作,因为我会期待它 let rec iMake acc = match acc with | 10 -> 100 | _ -> iMake (acc+1) 唯一的区别是版本2将acc+1表达式放在括号中。所以我的问题是,为什么第一个版本不起作用,而第二个版本起作用?这是否意味着我应该将所有函数参数

我对F#有点陌生,在处理一些递归函数时,我遇到了一些奇怪的行为。我有两个不同的版本:

第1版:
这会导致堆栈溢出,尽管看起来不应该(至少在我的noob眼里)

版本2:
这一个工作,因为我会期待它

let rec iMake acc =
  match acc with
  | 10 -> 100
  | _ -> iMake (acc+1)

唯一的区别是版本2将acc+1表达式放在括号中。所以我的问题是,为什么第一个版本不起作用,而第二个版本起作用?这是否意味着我应该将所有函数参数放在括号中,以避免将来出现这种情况?

函数调用的优先级高于二进制运算符
+
。第一个函数的工作原理是:

let rec iMake acc =
    match acc with
    | 10 -> 100
    | _ -> (iMake acc)+1

我明白了,所以它试图在(iMake acc)的结果中添加一个,这就是stackoverflow的来源。acc实际上从不递增,有趣。
let rec iMake acc =
    match acc with
    | 10 -> 100
    | _ -> (iMake acc)+1