【发布时间】:2016-08-17 20:36:33
【问题描述】:
你们中的一些人可能会觉得这个问题有点奇怪,但我真的很想知道这个程序是否是递归的,这就是我想知道的。
(defun howmany(sez)
(if (null sez)
0
(+ 1 (howmany (cdr sez)))))
(defun sum(sez)
(if (null sez)
0
(+ (car sez) (sum(cdr sez)))))
(defun avg(sez)
(if (null sez)
0
(/ (sum sez) (howmany sez))))
(print (avg '(100 200 300)))
感谢您的所有回答!
【问题讨论】:
-
几乎不可能阅读未格式化的 Lisp 代码。请缩进您的代码。例如,您的代码应该看起来像:pastebin.com/raw/ZdPp8A0i。使用问题下方的edit 链接。
-
虽然你问的不是很清楚。 SUM 调用自己,HOWMANY 调用自己,所以它们都是递归的,当然。请注意,您可以只做
(defun avg (seq) (/ (reduce '+ seq) (length seq))。无需重新实现 LENGTH 和列表求和函数。 -
但是您正在使用内置函数:+、/、null、car、cdr(并且这些函数位于一些内置非函数之上:defun 和 if )。
-
每一个最终调用它实现的函数名的函数都是递归的。您的所有功能都可以做到这一点。它们甚至是递归过程,因为它们会增加堆栈,而您可以通过使用累加器轻松完成所有这些迭代过程。您可能很快就会了解更多相关信息 :-)
sez是某种语言的列表吗? -
如果你自己都想不通,那你肯定不明白“递归”是什么意思。
标签: recursion common-lisp