Recursion 球拍将数字从基数10转换为基数4的简单程序
我的球拍有些问题。作业要求我编写一个程序,将任何数字从10进制转换为4进制,解决方案应写在列表中。例如(转换为基数4 12)->(列表3 0) 现在我已经编写了一个过程,但它将每个数字插入到一个单独的列表中。 这是我的密码Recursion 球拍将数字从基数10转换为基数4的简单程序,recursion,numbers,racket,procedure,Recursion,Numbers,Racket,Procedure,我的球拍有些问题。作业要求我编写一个程序,将任何数字从10进制转换为4进制,解决方案应写在列表中。例如(转换为基数4 12)->(列表3 0) 现在我已经编写了一个过程,但它将每个数字插入到一个单独的列表中。 这是我的密码 (define (convert-to-base-four number) (cond [(<= number 3) (cons number empty)] [(> number 3) (reverse (list (remainder
(define (convert-to-base-four number)
(cond
[(<= number 3) (cons number empty)]
[(> number 3) (reverse (list (remainder number 4)
(convert-to-base-four (floor (/ number 4)))))]))
(定义(转换为四进制数字)
(续)
[(3号)(反面)(列表(其余4号)
(转换为底数四(楼层(/编号4‘‘‘‘‘))]))
有人知道该怎么做吗?
非常感谢尝试在列表中使用append:)
享受家庭作业的乐趣;) AlexKnauth的评论是您需要遵循的–您必须为您的函数定义并遵守严格的(输入)和(输出)
;; from your code
(list Y
(convert-to-base-four X))
这里的Y
和X
是什么并不重要:如果convert to base four
返回某个值的列表,并递归调用convert to base four
——返回一个列表——您将得到一个列表列表
另一种解决方案指出,使用append
——但是
当您应该使用
cons
时,您正在使用list
。此外,由于在不同的递归步骤上有多个reverse
调用,数字将以错误的顺序混在一起。问题是,如果我将list和reverse组合在一起,它会出错。这是一个妄想症问题吗?不,这不是帕伦问题。你的树很好。这主要是一个列表
与缺点
问题。一旦解决了这个问题,你就必须弄清楚它是否应该这样使用反向。换句话说,当我使用“list”时,我不需要反向,但数字是单独放在列表中的,例如(list(list 3)0)好的,我使用了append,它起了作用。非常感谢你的努力,我的朋友。这不是答案!请在投稿前阅读:非常感谢您的回答。我明白你的意思。再次感谢
(define (base4 n)
(if (< n 4)
(list n)
(append (base4 (floor (/ n 4)))
(list (remainder n 4)))))
(displayln (base4 12)) ; (3 0)
(displayln (base4 13)) ; (3 1)
(displayln (base4 14)) ; (3 2)
(displayln (base4 15)) ; (3 3)
(displayln (base4 16)) ; (1 0 0)
(displayln (base4 123456)) ; (1 3 2 0 2 1 0 0 0)
(define (base4 n)
(let loop ((m n) (acc empty))
(if (< m 4)
(cons m acc)
(loop (floor (/ m 4))
(cons (remainder m 4) acc)))))
(displayln (base4 12)) ; (3 0)
(displayln (base4 13)) ; (3 1)
(displayln (base4 14)) ; (3 2)
(displayln (base4 15)) ; (3 3)
(displayln (base4 16)) ; (1 0 0)
(displayln (base4 123456)) ; (1 3 2 0 2 1 0 0 0)