用于将数字从基数10转换为基数4的球拍简单程序

时间:2017-11-23 15:36:25

标签: recursion numbers racket procedure

我的球拍有些问题。该任务要求我编写一个程序,将任何数字从基数10转换为基数4,解决方案应该写在列表中。例如(convert-to-base-four 12) - > (清单3 0) 现在我编写了一个程序,但它将每个数字插入一个单独的列表中。 继承我的代码。

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

有谁知道该怎么办? 非常感谢

2 个答案:

答案 0 :(得分:0)

AlexKnauth的评论是您需要遵循的评论 - 您必须为您的函数定义并遵守严格的domain(输入)和codomain(输出)

body {
    font-family: 'Century Gothic', serif;
    font-size: 13px;
    background: url('https://via.placeholder.com/300x300') no-repeat;
}

;; from your code (list Y (convert-to-base-four X)) Y在这里并不重要:if X返回某个值的列表以及对convert-to-base-four的递归调用 - 返回一个列表 - 你最终会得到一份清单!

另一个解决方案是使用convert-to-base-four - 但是beware, it's a trap

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) - 我们在这里使用带有两个循环状态变量appendloop的{​​{3}} m

acc

答案 1 :(得分:-3)

尝试在列表中使用追加:)

享受家庭作业的乐趣;)