【发布时间】:2013-12-22 00:21:52
【问题描述】:
我想知道这是否是此功能的最快版本。
(defun foo (x y)
(cond
;if x = 0, return y+1
((zp x) (+ 1 y))
;if y = 0, return foo on decrement x and 1
((zp y) (foo (- x 1) 1))
;else run foo on decrement x and y = (foo x (- y 1))
(t (foo (- x 1) (foo x (- y 1))))))
当我运行它时,我通常会遇到堆栈溢出错误,所以我试图找出一种不使用计算机来计算类似 (foo 3 1000000) 的方法。
通过分析函数,我认为它在递归情况下嵌入了 foo,导致 (foo 3 1000000) 中的溢出。但是,由于您正在减少 y,因此步数是否等于 y?
编辑:从 cmets 中删除谎言
【问题讨论】:
-
您要么躺在 cmets 中;),要么您的代码有错误。在第二种情况下,您 not 返回 y + 1。
标签: scheme lisp computation-theory