我被要求编写一个程序,通过递归过程来计算帕斯卡三角形的元素。我可以创建一个过程,返回三角形中的单个行或特定行中的一个数字。有没有更有效的方法来编写这个递归过程?
这里是我的解决方案:
(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)
较大行的元素。通过递归过程解决这个问题是否有更好的过程?
另外,如果我想使用迭代过程(尾递归),我该如何编写它?
回复我的编辑,你的代码可能是与使用更加可读'cond'而不是嵌套'if's,以及使用命名'let' ins内在的定义但是我仅将修改保留为仅用于格式化。 – 2014-09-29 16:07:04