约瑟夫斯问题的这种实现在哪里不足?对于那些不熟悉约瑟夫斯问题的人,我们的目标是从循环链表中删除每 3 个条目,直到只剩下一个。在此示例中,我将删除每个“mth”值。
(define (joseph lst)
(let ((m (+ 1 (random (length lst)))))
(define (joseph-h i xlst mlst)
(cond ((<= (length xlst) 1) xlst)
((null? (cdr mlst))
(joseph-h i xlst xlst))
((= i m)
(joseph-h 1 (delete (car mlst) xlst) (cdr mlst)))
(else
(joseph-h (+ i 1) xlst (cdr mlst)))))
(joseph-h 0 lst lst)))
(joseph (list 1 2 3 4 5 6 7))
(define (delete v lst)
(cond ((= v (car lst))
(cdr lst))
(else
(cons (car lst) (delete v (cdr lst))))))
我总是以列表的最后一个数字作为答案。我知道这是不对的。