尾部递归函数还能得到栈溢出吗?

问题描述 投票:0回答:0

我一直在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))))
          )
    )

)

这不是尾部递归函数,还是尾部递归函数仍然会出现堆栈溢出?

lisp common-lisp tail-recursion
© www.soinside.com 2019 - 2024. All rights reserved.