【发布时间】:2011-01-22 21:16:12
【问题描述】:
函数
f由f(n) = n如果n < 3和f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)如果n > 3定义。编写一个通过递归过程计算f的过程。编写一个通过迭代过程计算f的过程。
递归实现它很简单。但我不知道如何迭代地做到这一点。我尝试与给出的斐波那契示例进行比较,但我不知道如何将其用作类比。所以我放弃了(对我感到羞耻)并在谷歌上搜索an explanation,我发现了这个:
(define (f n)
(if (< n 3)
n
(f-iter 2 1 0 n)))
(define (f-iter a b c count)
(if (< count 3)
a
(f-iter (+ a (* 2 b) (* 3 c))
a
b
(- count 1))))
阅读后,我理解了代码及其工作原理。但我不明白的是从函数的递归定义到 this 所需的过程。我不明白代码是如何在某人的脑海中形成的。
您能解释一下得出解决方案所需的思考过程吗?
【问题讨论】:
-
@Javier ,我在程序中的这一行遇到问题(如果 (时才会调用f-iter 3.我得到了a1=f(2),a2=f(3),所以'a'只存在于n=3之后,但无法连接点。
-
@Javier 我现在意识到循环将为 a 分配新值。
标签: recursion scheme iteration sicp