【发布时间】:2016-03-16 04:53:01
【问题描述】:
采用整数并创建二进制列表的递归函数。
我不明白为什么,如果 (binList 5) 将输出 (1 0 1) 这是正确的,而 (binList 10) 的代码导致 (append (binlist 5) '(0)) 不给我(1 0 1 0),但给我(1 1 0 0)。我什至用 Java 写了同样的想法,并且成功了。递归在 Lisp 中的工作方式是否不同?还是我遗漏了什么?
(defun binList(N)
(cond
((< N 1) '())
((= N 1) '(1))
((> N 1) (if(=(mod N 2) 0)
(append (binList(/ N 2)) '(0))
(append (binList(floor(/ N 2))) '(1))))))
【问题讨论】:
-
重复调用
APPEND将元素添加到单链表的末尾是不好的。尝试找出原因。将新元素添加到单链表的前面。
标签: list recursion binary lisp