如何确保函数是尾递归的?

时间:2017-07-02 12:00:41

标签: recursion scheme racket tail-recursion

所以我试着写一个尾递归求幂(对于正整数指数)。我带着这个(它是通过平方取幂):

(define (^ n k)
  (define (helper n k acc)
    (cond
      [(zero? k) acc]
      [(even? k) (helper (* n n) (/ k 2) acc)]
      [else (helper n (- k 1) (* n acc))]))
  (helper n k 1))

但是如果我尝试用大论点来运行它,我总是到Racket virtual machine has run out of memory; aborting。为什么这个函数不被认为是尾递归的?每个条件都直接导致递归执行或终端符号。

0 个答案:

没有答案