我被要求编写一个通过递归过程计算帕斯卡三角形元素的程序。我可以创建一个返回三角形中的单行或特定行中的数字的过程。
这是我的解决方案:
(define (f n)
(cond ((= n 1) '(1))
(else
(define (func i n l)
(if (> i n)
l
(func (+ i 1) n (cons (+ (convert (find (- i 1) (f (- n 1))))
(convert (find i (f (- n 1)))))
l))))
(func 1 n '()))))
(define (find n l)
(define (find i n a)
(if (or (null? a) (<= n 0))
'()
(if (>= i n)
(car a)
(find (+ i 1) n (cdr a)))))
(find 1 n l))
(define (convert l)
(if (null? l)
0
(+ l 0)))
这似乎工作正常,但查找以(f 8)
. 有没有更好的程序通过递归过程来解决这个问题?
另外,如果我想使用迭代过程(尾递归),我将如何编写它?