(define (sum term a next b)
(define (iter a result)
(if (> a b)
result
(iter (next a)
(+ (term a) result))))
(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来存放了数据,这就相当于在内部创建的局部变量吧。