题目:输入n,实现n的阶乘。
第一次接触Lisp,刚刚对语法有了零星的认识,重点是括号的位置使用,加强对括号的作用理解。分别使用递归和迭代的方法。递归的方法更为清晰简便,然而会产生很多的冗余计算量。迭代的方法数据储存量是固定的。
以下用Lisp实现n的阶乘:
//方法一、递归法:
>(define (fact n)
(if (= n 1)
1
(* n (fact (- n 1)))))
//方法二、迭代法:
>(define (fact n)
(fact-iter 1 1 n)) //定义阶乘用一个迭代过程
>(define (fact-iter product count n) //定义迭代过程,每次分别迭代乘积,计数器,计数器上限(不变)
(if (> count n)
product
(fact-iter (* product count) (+ count 1) n)))