我一直在codesignal.com用C-Lisp解决一些挑战,学习C-Lisp,我一直避免使用循环来做lisp风格的代码。
在这个名为交替求和的挑战中(它给你一个可能非常大的int数组a,并要求你返回一个数组列表{sumOfEvenIndexedElements, sumOfOddIndexedElements}),我一直在用这段代码接收堆栈溢出错误。
(defun alternatingSums(a &optional (index 0) (accumulated '(0 0)))
(cond ((= index (length a))
accumulated)
((evenp index)
(alternatingSums
a
(1+ index)
`(,(+ (svref a index ) (elt accumulated 0)) ,(elt accumulated 1)))
)
((oddp index)
(alternatingSums
a
(1+ index)
`(,(elt accumulated 0) ,(+ (svref a index ) (elt accumulated 1))))
)
)
)
这不是尾部递归函数,还是尾部递归函数仍然会出现堆栈溢出?