Recursion 这个方案是递归的吗?

Recursion 这个方案是递归的吗?,recursion,scheme,tail-recursion,bits,Recursion,Scheme,Tail Recursion,Bits,该函数接收一个数字,并返回本应使用的位数 要求为“开”,以二进制表示输入数字。 例如,数字5在二进制中表示为101,因此需要两位“开”。我需要知道我写的函数是否是尾部递归。如果不是,我如何将其转换为尾部递归?谢谢 我的职能: (define (numOfBitsOn number) (define (numOfBitsOn-2 number acc) (if (> number 0) (if (odd? number) (

该函数接收一个数字,并返回本应使用的位数 要求为“开”,以二进制表示输入数字。 例如,数字5在二进制中表示为101,因此需要两位“开”。我需要知道我写的函数是否是尾部递归。如果不是,我如何将其转换为尾部递归?谢谢

我的职能:

(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))

DrRacket可以帮助您确定呼叫是否处于尾端位置。单击“语法检查”按钮。然后将鼠标指针移到所讨论表达式的左括号中。在一个示例中,我得到了以下结果:

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

从手册中:

Tail调用:在 相对于其封闭上下文的尾部位置由 从尾部表达式绘制一个浅紫色箭头到其 周围的表情


是的,它是尾部递归的。