如何将其实现为递归函数?

时间:2016-06-18 21:52:07

标签: scala recursion

如何递归定义此函数?

不知何故k必须保持不变,但由于我们不能使用j,我们必须为下一个递归步骤更改k

http://i.imgur.com/BnQlE1F.png

2 个答案:

答案 0 :(得分:1)

与递归函数一样,每次调用时都必须传递nkj。这是非常合乎逻辑的,特别是如果你考虑一个特定的函数执行。它只计算增量产品的一个步骤。因此,函数签名如下所示:

the_func(n, k, j):
    ...

您必须在每次特定计算后递增j以将下一个j传递给以下执行。此外,您必须添加如下所示的终止条件:

if(k==j):
    ... Pop back the whole recursion...

答案 1 :(得分:1)

如果必须以递归函数的形式执行此操作,请尝试以下操作:

def f(n: Double, k: Double) = {
  def f0(k1:Double): Double =
    if (k1 >= 1.0f)
      (n-k+k1)/k1 * f0(k1-1)
    else
      1.0f
  f0(k)
}

值得检查搜索foldLeft和foldRight并阅读差异。