在球拍,我定义了下面的函数,我想知道它是否是尾递归:是这个函数尾递归吗?
(define foo
(λ (c m s1 s2)
(if (< c m)
(if (= (modulo m c) 0)
(foo (+ c 1) m (+ s1 c) s2)
(foo (+ c 2) m s1 (+ s2 c)))
(cons s1 s2))))
我的问题实际上是这样的,但我必须写别的东西来满足我后质量标准。实际上,我不知道我的职位质量标准是。
我很难想象解释器在这种情况下如何重复使用与最优化相同的调用堆栈。 – 2013-03-18 14:42:30
在我上面的实现中,它更加清晰,将'foo'的尾调用看作一个奇怪的'for for',其中参数是每次迭代中更新的变量,第一个条件是循环的退出条件。然后很容易看到,相同的堆栈帧在调用之间重复使用 - 只有参数值需要更新 – 2013-03-18 15:05:01
非常感谢。 – 2013-03-18 15:12:50