F#:相互递归函数

时间:2010-09-01 18:30:31

标签: f# recursion mutual-recursion

  

可能重复:
  [F#] How to have two methods calling each other?

大家好,

我有一个场景,我有两个功能可以从相互递归中受益,但我不确定如何在F#中执行此操作

我的场景不像下面的代码那么简单,但是我想得到类似于编译的东西:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

let rec g x =
  if x>0 then
    f (x-1)
  else
    x

3 个答案:

答案 0 :(得分:27)

您还可以使用let rec ... and表格:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

and g x =
  if x>0 then
    f (x-1)
  else
    x

答案 1 :(得分:2)

要获得相互递归的函数,只需将其作为参数传递给另一个

let rec f g x =
  if x>0 then
    g (x-1)
  else
    x

let rec g x =
  if x>0 then
    f g (x-1)
  else
    x

答案 2 :(得分:2)

使用let rec ... and ...构造:

let rec f x =
  if x>0 then
    g (x-1)
  else
    x

and g x =
  if x>0 then
    f (x-1)
  else
    x