这个函数是Tail-Recursive吗?方案

时间:2013-12-03 18:07:17

标签: recursion scheme racket tail-recursion

以下函数是否是尾递归的?如果没有,我可以做些什么来修改它?

(define (euclids-alg n1 n2)
 (cond((= n1 0) n2)
      ((= n2 0) n1)
      ((= n1 n2) n1)
      ((> n1 n2) (euclids-alg (- n1 n2) n2))
      ((< n1 n2) (euclids-alg n1 (- n2 n1))))) 

1 个答案:

答案 0 :(得分:6)

是的,你的函数是tail recursive,因为递归调用是在尾部位置 - 这意味着它是递归返回后它做的最后一件事。看一下specification,以便更好地了解我们何时进行有效的尾调用,何时不进行调用。