F#递归终止

时间:2010-09-04 03:38:22

标签: f# recursion

我一直在阅读很多关于函数式编程和f#的内容。我有一段我无法理解的代码片段。我熟悉递归程序,但这个特殊的代码让我烦恼

open System

let rec fact x =
    if x < 1 then 1
    else x * fact (x - 1)

fact 6

在这段代码中,代码中没有终止重复的地方。该程序如何知道何时停止。如果我用c#编程,我会告诉程序在索引或迭代器高于6时停止递归。

1 个答案:

答案 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);
}

纯函数编程很有意思,因为永远不会有回报,所有程序都会进行评估。你需要问问自己'这个表达的评价是什么?'