计算机程序的结构和解释第1.2.1节:线性递归和迭代:
比较这两个过程...每个过程都需要与n成正比的多个步骤才能计算n!
这两个进程由
指定(define (factorial n)
(if (= n 1)
1
(* n (factorial (- n 1)))))
;; This is the linear recursive process
(define (factorial n)
(define (iter product counter)
(if (> counter n)
product
(iter (* counter product)
(+ counter 1))))
(iter 1 1))
;; This is the linear iterative process
我的问题是:两个过程如何需要与n成正比的多个步骤才能计算n! ?
答案 0 :(得分:0)
对于第一个过程; 您必须在一个递归循环中执行以下步骤:
- check if n equals 1
- multiply n with (factorial (- n 1))
if we split it a little, it includes (- n 1) and a function call and a multiplication.
让我们将这些大致分为4个步骤。
由于必须执行这4步直到n = 1,所以总共是4 * n步。因此它与n成正比。 (让我们忽略一些细节,例如,对n = 1种情况的处理有些不同,因为当n足够大时,可以忽略它)
第二个是一样的
答案 1 :(得分:0)
在两种情况下,过程都将继续运行,直到满足特定条件为止。
(factorial)
过程并减少n
直到n=1
counter
变量,直到counter > n
n
的值越大,满足每次终止检查的时间就越长。
示例:(factorial 1000)
比(factorial 10)
花费更长的时间,仅仅是因为将n
每次减少factorial
时需要花999步就减少data-namespace
}(在递归过程中)被调用。另一方面,以10比1只需9步。
希望能回答您的问题。