首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

SICP 练习题 (1.11) 解题总结

2013-09-12 
SICP 习题 (1.11) 解题总结SICP 习题 1.11相对简单一点,主要是里面没有太多数学问题,数学还是有一点,让这

SICP 习题 (1.11) 解题总结

SICP 习题 1.11相对简单一点,主要是里面没有太多数学问题,数学还是有一点,让这些数学天才们不使用数学样例它们可能宁愿不写书了。


题目要求我们定义一个过程实现函数f,f的规则是:

如果n< 3那么f(n) =n

如果n>=3那么f(n)= f(n-1) + 2f (n-2) + 3f(n-3)

要求用递归实现一遍,然后用迭代实现一遍


这个题目差不多是书中1.2.2节提到的“斐波那契数”的翻版,就是斐波那契数是前两个数相加,而这个是前三个数相加,同时加了一些“乘2”,“乘3”的操作。


书中讲到斐波那契数主要是为了讲解树形递归,所谓树形递归可以简单地理解为一个过程两次以上递归调用自己,作为程序员的我们应该不难理解这个概念。


因为斐波那契数经常被当作递归教材的例子,所以很多人应该都熟悉这个数学概念,这里就不详细讲了,不明白的人仔细看一下书中的内容也应该可以理解。


归于题目的递归解,做起来还是比较简单的,递归解的好处就是比较直观,我做的答案如下:

(define (myf-iter a b c n)  (format #t "Caculating n, n is ~S, a is ~S, b is ~S, c is ~S ~%" n a b c)  (if (= n 0)      a  (myf-iter b c ( + (* 3 a) (* 2 b) c) (- n 1))))(define (newf n)  (myf-iter 0 1 2 n))


因为习题1.11比较简单,就不罗嗦了。


热点排行