Recursion 具有多个函数的递归
你们中的一些人可能会觉得这个问题有点奇怪,但我真的想知道这个程序是否是递归的,这就是我想知道的全部Recursion 具有多个函数的递归,recursion,common-lisp,Recursion,Common Lisp,你们中的一些人可能会觉得这个问题有点奇怪,但我真的想知道这个程序是否是递归的,这就是我想知道的全部 (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
(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)))
谢谢你的回答 首先,看一看您的代码并对其进行更多的格式化,以便lisper能够轻松阅读
(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)))
然后分析这个脚本,它包含三个函数,最后一个s表达式计算这些函数
对于这三个函数,平均值、总和和数量
有一个故事叫《马丁与龙》,你可以在第8章中找到,你应该读一下,在:
这条龙假装讨厌马丁的问题,
实际上我很喜欢教他递归。有一天,它决定
正式解释递归的含义。龙叫马丁去
对待每一个递归问题,就好像它是一次旅行。如果他
他总是遵循三条递归解决问题的规则
成功地完成旅程
龙这样解释规则:
(+ 1 (howmany (cdr sez)))
(+ (car sez) (sum (cdr sez)))
希望这有助于阅读未格式化的Lisp代码几乎是不可能的。请缩进你的代码。例如,您的代码应该看起来像:。使用问题下面的链接。你问的问题并不清楚。SUM调用本身,以及有多少个调用本身,所以这两个调用都是递归的。请注意,您可以只执行
(defun avg(seq)(/(reduce'+seq)(length seq))
。无需重新实现length和列表求和函数。但您使用的是内置函数:+,/,null,car,cdr(这是一些内置非函数的顶部:defun和if)。最终调用其实现的函数名称的每个函数都是递归的。您的所有函数都是这样做的。它们甚至是递归过程,因为它们增加了堆栈,而您可以通过使用累加器轻松完成所有这些迭代过程。您可能很快就会了解更多信息:-)sez
是某种语言的列表吗?如果你自己不能理解这一点,你一定不明白“递归”是什么意思。