這是函數f(n)= n的遞歸過程,如果n和f(n)= f(n-1)+ 2f(n-2)+ 3f (n - 3)如果n≥3Scheme:將遞歸過程改爲迭代過程
(define (f n)
(if (< n 3)
n
(+ (f (- n 1))
(* 2 (f (- n 2)))
(* 3 (f (- n 3))))))
問題集是將其更改爲迭代遞歸。我想出了這個:
(define (g n)
(if (< n 3)
n
(g-helper n)))
(define (g-helper n)
(if (< n 3)
n
(+ (basemaker 0 1 (- n 1))
(g-helper (- n 1))
(* 2 (basemaker 0 2 (- n 2))
(g-helper (- n 2)))
(* 3 (basemaker 0 3 (- n 3))
(g-helper (- n 3))))))
(define (basemaker counter constant n)
(cond ((= 2 n) 2)
((= 1 n) 1)
((= 0 n) 0)
(else
(basemaker (+ counter constant) constant (- n constant)))))
的東西是錯誤的:
> (f 3)
4
> (f 4)
11
> (f 5)
25
> (g 3)
6
> (g 4)
19
> (g 5)
45
>
在這花了幾個小時,但我看不到我在做什麼錯。 我知道代碼是重複性和笨重的,但我想在查看語法之前,先看看我沒有理解的過程。
謝謝。
感謝您的幫助。我沒有時間回到這一點,但是我可以從你寫的內容看到如何思考迭代。 – Nufdriew