我正在学习F#(虽然多年来一直使用C#的函数式方面,但对函数式编程还是新手),其中之一我读到的是F#编译器会识别尾递归并将其编译为while循环(参见http://thevalerios.net/matt/2009/01/recursion-in-f-and-the-tail-recursion-police/)。
我不明白的是,如果它最终会变成while循环,为什么你要编写递归函数呢?特别是考虑到您需要做一些额外的工作使函数变为递归。我有一种感觉,有人可能会说while循环不太功能化,你想要表现得像个功能化的东西,所以你使用递归,但那么编译器为什么要将其转换为while循环呢?
有人能解释一下吗?
我不明白的是,如果它最终会变成while循环,为什么你要编写递归函数呢?特别是考虑到您需要做一些额外的工作使函数变为递归。我有一种感觉,有人可能会说while循环不太功能化,你想要表现得像个功能化的东西,所以你使用递归,但那么编译器为什么要将其转换为while循环呢?
有人能解释一下吗?