F#递归终止

Luk*_*101 2 recursion f#

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

open System

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

fact 6
Run Code Online (Sandbox Code Playgroud)

在这段代码中,代码中没有终止重复的位置.该程序如何知道何时停止.如果我在c#中对此进行编程,我会告诉程序在索引或迭代器高于6时停止递归.

lin*_*r27 10

当递归x小于1因为表达式的结果时,递归停止1

if x < 1 then 1
Run Code Online (Sandbox Code Playgroud)

在C#中,函数看起来如下:

public int fact(int x)
{
   if (x < 1)
      return 1;
   else
      return x * fact(x - 1);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 与F#的if..else最接近的等价物是C#的三元条件运算符,它不执行语句,但求值为单个值.例如:`int fact(int n){return n <1?1:n*fact(n - 1); }` (2认同)