SICP-《计算机程序的构造和解释》之习题分析与收获——练习1.30

来源:互联网 发布:excel数据选项卡在哪 编辑:程序博客网 时间:2024/05/19 15:44
(define (sum term a next b)
    (define (iter a result)
        (if (> a b)
            result
            (iter (next a)
                  (+ (term a) result))))   

    (iter a 0))               //在定义后要记得在外面调用


稍微归纳下递归和迭代的区别

从形式上类似于

(define (f n)

.........

(+ a (f (+ 1 n))))

他就是理解为用a去加下一个自己的不同参数的函数,然后又会遇到想通情况最终形成在寄存器(这方面不太了解)形成a+a+a+....+f(n+i)的局面,最后再来收拢。这样会占用很多的空间。

(define (f n)

.........

(f (n+i)))

直观上看就是调用自身函数前面不加外部变量,然后仅用参数去储存每次上次计算的结果。


这里的sum原先是没有可以用来存储作用的参数,所以在里面嵌套了一个 iter函数从而用result来存放了数据,这就相当于在内部创建的局部变量吧。

0 0
原创粉丝点击