小编rmw*_*rmw的帖子

将递归函数变成尾递归

我正在 ATS 中编码,并尝试创建一个函数来查找给定整数的平方根。这里提供的代码可以正确满足我的要求,但不是尾递归。

implement intsqrt(n) = 
if(n >= 1)
  then let
    val n4 = n / 4
    val res = 2 * intsqrt(n4) + 1
  in
    if(res * res <= n) then res else 2*intsqrt(n4)
  end
  else n
Run Code Online (Sandbox Code Playgroud)

我不确定其他人是否熟悉这门语言,但这是我使用它的第一周。我知道常规递归和尾递归之间的明显区别,我只是不明白如何改变它。

我什至不需要确切的代码来做到这一点,我只是想知道这是怎么可能的。为了找到 sqrt,我必须计算 n4 = 1 / n,然后将其乘以 2。然而,这样做会进入递归。我想要做的是计算结果,然后将其传递给下一个递归调用。

这是否意味着我需要以某种方式向后工作?希望这一切都有道理,但如果需要的话我会尽力澄清。

谢谢!

recursion tail-recursion function ats

5
推荐指数
1
解决办法
319
查看次数

标签 统计

ats ×1

function ×1

recursion ×1

tail-recursion ×1