我对单声道上的 F# 有疑问。我在我的大学做这门函数式编程课程。在课程中我们使用 F#,我使用 Xamarin 作为我的编辑器。
问题是我们上了一堂关于尾递归的课,作为提高效率的工具。但是当你不能写你的函数尾递归时,我们不得不使用连续的,这样我们使用堆而不是堆栈。
这似乎不适用于带有 F# 3.1 的单声道 3.10.0,我得到一个 System.StackOverflowException。这应该是不可能得到的,因为连续应该使用堆。
let rec fibC n c =
match n with
|0 -> c 0
|1 -> c 1
|n -> fibC (n-1) (fun v1 -> fibC (n-2) (fun v2 -> c(v1+v2)))