Recursion 在lisp中返回第n个元素的递归函数
我想验证这是否是一个递归函数?需要返回第n个元素,我的工作正常,我只是想确定一下Recursion 在lisp中返回第n个元素的递归函数,recursion,common-lisp,Recursion,Common Lisp,我想验证这是否是一个递归函数?需要返回第n个元素,我的工作正常,我只是想确定一下 (defun nth2(n lst) (let((count 1)) (loop (cond((equal count n)(return (car lst)))) (setq count (+ count 1)) (setq lst (cdr lst))))) 嗯。我刚试过这个主意。它给
(defun nth2(n lst)
(let((count 1))
(loop
(cond((equal count n)(return (car lst))))
(setq count (+ count 1))
(setq lst (cdr lst)))))
嗯。我刚试过这个主意。它给了我一个错误:不在名为NIL的块内
(defun nth2(n lst)
(let((count 1))
(cond((equal count n)(return (car lst)))
(t(setq count (+ count 1))
(nth2(count (cdr (lst))))))))
下面是递归工作原理的概述。。。每个递归函数必须具有:
n-1
或(cdr my list)
),以便递归停止setq
、setf
等
您可以倒计时,而不必向上计数并使用额外的变量。假设索引从0开始,例如:
(nth2 2 '(a b c d e))
= (nth2 1 '(b c d e))
= (nth2 0 '(c d e))
= (car '(c d e))
= 'c
因此,在删除第一个元素时,必须递归到0,然后在索引为0时返回第一个元素:
(defun nth2 (n lst)
(if (zerop n)
(car lst)
(nth2 (1- n) (cdr lst))))
不,它不是递归函数。一般来说,递归函数调用它们自己,因此您应该在
nth2
的定义中看到nth2
。如果我用(n-1)之类的东西来调用函数,那么我应该如何继续?我是否先尝试在纸上解决问题,然后编写代码?您需要找到一个很好的方案介绍;我个人觉得像《小阴谋家》这样的书非常有用。把它写在纸上确实是个好主意。顺便说一句,你还没有接受你在网上发布的问题的任何答案。如果至少有一个正确答案,请接受你最喜欢的答案。是的,我刚刚看到我们应该这样做。我在找。