SICP 2 38 研究遞迴和迭代模型

2021-07-26 04:38:49 字數 656 閱讀 4062

之前討論的過程accumulate也稱作fold_right(右摺疊),因為它將序列的第乙個元素組合到右邊所有元素的結果上。相對的,也有個fold_left(左摺疊),將左邊的結果加到右邊的元素上。

fold_right的scheme**:

(define (iter result

rest)

(if (null? rest)

result

(iter (op result (car rest))

(cdr rest))))

這是乙個迭代的過程。

那麼,下面的表示式的值是什麼?

(fold_right / 1 (list 1 2 3))

(fold_left / 1(list 1 2 3))

(fold_right list nil (list 1 2 3))

(fold_left list nil (list 1 2 3))

fold_right是個線性遞迴過程,即最後一步便是回歸操作的第一步,則第乙個表示式的值是 1/(2/3)

fold_left 是個迭代(尾遞迴)過程,則第二個表示式的值是 (1/2)/3

同理:

第三個表示式的值是 ((1 2 3))

第四個表示式的值是 (((() 1) 2) 3)

SICP練習 67 練習2 38

練習2.38 這道題比較有意思了,我們先來將fold left和accumulate模擬,accumulate是遞迴,而fold left是迭代。前者通過不斷地將 op result car rest 變換成initial,通過將 cdr rest 變換成sequence,而rest一開始其實就是s...

SICP習題 1 9 遞迴與迭代初探

define plus recursive a b if a 0 b inc plus recursive dec a b define inc n n 1 define dec n n 1 plus recursive 3 5 從計算過程中可以很明顯地看到伸展和收縮兩個階段,且伸展階段所需的額外儲...

遞迴研究 二 全排列問題

從n個不同的元素中任取m m n 個,按照一定的順序排列起來,叫做從n個元素中取出m個元素的乙個排列,當m n時,所有的排列情況叫做全排列.若求n個元素的全排列,可以先求n 1個元素的全排列,然後針對n 1個全排列的每一種情況t,把第n個元素依次插入到t的n個間隔中.n 1時,為遞迴的終結條件.de...