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

2022-01-29 08:21:18 字數 514 閱讀 4162

(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)

從計算過程中可以很明顯地看到伸展和收縮兩個階段,且伸展階段所需的額外儲存量和計算所需的步數都正比於引數a,說明這是乙個線性遞迴計算過程。

(define (plus-iteration a b)

(if (= a 0)

b(plus-iteration (dec a) (inc b))))

(plus-iteration 3 5)

從計算過程中可以看到,這個版本的plus函式只使用常量儲存大小,且計算所需的步驟正比於引數a,說明這是乙個線性迭代計算過程。

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

之前討論的過程accumulate也稱作fold right 右摺疊 因為它將序列的第乙個元素組合到右邊所有元素的結果上。相對的,也有個fold left 左摺疊 將左邊的結果加到右邊的元素上。fold right的scheme define iter result rest if null?res...

遞迴與迭代

遞迴與迭代都是基於控制結構 迭代用重複結構,而遞迴用選擇結構。遞迴與迭代都涉及重複 迭代顯式使用重複結構,而遞迴通過重複函式呼叫實現重複。遞迴與迭代都涉及終止測試 迭代在迴圈條件失敗時終止,遞迴在遇到基本情況時終止。使用計數器控制重複的迭代和遞迴都逐漸到達終止點 迭代一直修改計數器,直到計數器值使迴...

遞迴與迭代

1 遞迴 當函式用自身來定義時就稱為是遞迴 recursive 的。遞迴必須滿足四個基本法則 1 基本情形 必須給出基準情況,不用遞迴就能求出,用於終止遞迴運算 2 不斷推進 對於那些要被遞迴求解的情形,遞迴呼叫必須能夠朝著乙個基準情形推進 3 設計法則 假設所有的遞迴呼叫都能執行 4 合成效益法則...