我一直在阅读很多关于函数式编程和f#的内容。我有一段我无法理解的代码片段。我熟悉递归程序,但这个特殊的代码让我烦恼
open System
let rec fact x =
if x < 1 then 1
else x * fact (x - 1)
fact 6
在这段代码中,代码中没有终止重复的地方。该程序如何知道何时停止。如果我用c#编程,我会告诉程序在索引或迭代器高于6时停止递归。
答案 0 :(得分:10)
当x
小于1
时递归停止,因为表达式的结果是1
if x < 1 then 1
在C#中,函数如下所示:
public int fact(int x)
{
if (x < 1)
return 1;
else
return x * fact(x - 1);
}
纯函数编程很有意思,因为永远不会有回报,所有程序都会进行评估。你需要问问自己'这个表达的评价是什么?'