【发布时间】:2017-10-07 11:26:42
【问题描述】:
SICP 1.3.1 节的求和过程产生了一个N 阶空间和时间复杂度的线性递归过程。这个过程的代码是:
(define (sum-integers a b)
(if (< a b)
0
(+ a (sum-integers (+ a 1) b))))
我想知道的是,如果我决定使用类似的过程对一系列斐波那契数进行求和:
(define (sum-fib a b)
(if (< a b)
0
(+ (fib a) (sum-fib (+ a 1) b))))
将fib定义为:
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2))))))
如何分析 sum-fib 的空间和时间复杂度?我会忽略整个过程的线性递归风格,并将其中 fib 的树递归作为最坏的情况优先考虑吗?我是否必须以某种方式结合 fib 和 sum-fib 的空间/时间复杂性,如果是,如何?另外,假设我从另一个程序员那里得到了 sum-fib,并且我将它用作更大系统中的组件。如果我的程序因为 fib 的实现方式而变慢,我怎么知道?
这是我在这个平台上的第一个问题,所以还请就如何更好地发布和找到问题的答案提出建议。感谢您的贡献。
【问题讨论】:
-
感谢您的参考。请注意,我知道如何独立分析 fib 和 sum,我正在尝试弄清楚如何分析 sum-fib。
标签: algorithm recursion scheme racket sicp