我正在做SICP 练习2.28并偶然发现以下代码的奇怪行为:
(define (fringe tree)
(cond
((null? tree) '())
((not (pair? tree)) (list tree))
(else (append (fringe (car tree)) (fringe (cdr tree))))))
(define (fringe-tail tree)
(define (fringe-iter tree result)
(cond
((null? tree) result)
((not (pair? tree)) (list tree))
(else (fringe-iter (cdr tree) (append result (fringe-tail (car tree)))))))
(fringe-iter tree '()))
(define x (make-list (expt 10 4) 4))
(time (fringe x))
(time (fringe-tail x))
Run Code Online (Sandbox Code Playgroud)
普通fringe运行速度比其迭代版本快得多fringe-tail:
cpu time: 4 real time: 2 gc time: 0
Run Code Online (Sandbox Code Playgroud)
与
cpu …Run Code Online (Sandbox Code Playgroud)