【问题标题】:Is this Scheme function tail recursive?这个 Scheme 函数是尾递归的吗?
【发布时间】:2015-10-29 18:19:51
【问题描述】:

该函数接收一个数字并返回本应包含的位数 必须为“on”才能以二进制表示输入数字。 例如,数字 5 在二进制中表示为 101,因此需要两个位为“on”。我需要知道我写的函数是否是尾递归。如果没有,我怎样才能把它变成尾递归?谢谢!

我的功能:

(define (numOfBitsOn number)
  (define (numOfBitsOn-2 number acc)
      (if (> number 0)
           (if (odd? number)
               (numOfBitsOn-2(/(- number 1) 2) (+ acc (modulo number 2)))
               (numOfBitsOn-2 (/ number 2) acc))
           acc))
  (numOfBitsOn-2 number 0))

【问题讨论】:

  • 是的,它是尾递归的。

标签: recursion scheme tail-recursion bits


【解决方案1】:

DrRacket 可以帮助您确定呼叫是否处于尾部位置。单击“语法检查”按钮。然后将鼠标指针移动到相关表达式的左括号。在一个例子中,我得到了这个:

紫色箭头表示表达式处于尾部位置。

来自手册:

尾调用:任何(在句法上)在 相对于其封闭上下文的尾部位置由 从尾部表达式向其绘制一个浅紫色箭头 周围的表达。

【讨论】:

    猜你喜欢
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2013-10-05
    相关资源
    最近更新 更多