球拍/方案中的尾叫

时间:2019-01-18 00:10:58

标签: recursion functional-programming scheme racket tail-recursion

Code

; linear recursion
(define (factorial n)
  (if (= n 1)
      1
      (* n (factorial (- n 1)))))

; tail recusive:
; linear iterative process:

(define (alt-factorial n [counter 1] [product 1]
                       (if (> counter n)
                           product
                           (alt-factorial n (+ counter 1) (* product counter)))))

(* n (factorial (- n 1)))此return语句将递归调用与n相乘,而此return语句:(alt-factorial n (+ counter 1) (* product counter))可以在计数器和乘积变量的帮助下将所有计算结果放入递归调用中。这是什么使它成为一条尾声,这就是全部吗?使用编译器进行优化以在下一次调用中仅使用返回值,是否使用变量并不重要?抱歉,如果这个问题分散了,我很难理解这个概念。

0 个答案:

没有答案