SICP
杰Tang_fighting
这个作者很懒,什么都没留下…
展开
-
SICP-练习2.1
【练习2.1】 请定义出make-rat的一个更好的版本,使之可以正确处理整数和负数。当有理数为正时,make-rat应当将其规范化,使它的分子和分母都是正的。如果有理数为负,那么就应只让分子为负。 【分析】 分子、分母的符号总共有四种情况: 1. 分子、分母都为正数, 2. 分子为负数,分母为正数。 这两种情况下,输入和输出一致。 3. 分子、分母都为负数, 4. 分子为正数,分原创 2014-07-17 20:42:54 · 629 阅读 · 0 评论 -
Structure and Interpretation of Computer Programs-Exercise 1.3
【问题】 Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers. 定义一个过程,它以三个数为参数,返回其中较大的两个数的平方和。 【普通版】 (define (sum-square-largest x y原创 2014-06-28 21:25:51 · 1174 阅读 · 1 评论 -
SICP-换零钱方法的统计
【问题】 现有半美元、四分之一美元、10美分、5美分和1美分共5种硬币。若将1美元换成零钱,共有多少种不同方式? 【思路】 采用递归过程,假定我们所考虑的可用硬币类型种类排了某种顺序,于是就有下面的关系: 将总数为a的现金换成n中硬币的不同方式的数目等于 将现金数a换成除第一种硬币之外的所有其他硬币的不同方式数目,加上将现金数a-d换成所有种类的硬币的不同方式数目,其中的d是第一原创 2014-06-29 22:12:06 · 3056 阅读 · 1 评论 -
SICP-求幂
【问题】 对一个给定的数计算乘幂问题。 【思路1】 对一个基数b和一个正整数的指数n,计算出b^n的过程。可以通过下面的这个递归定义: b^n = b * b ^(n-1) b^0 = 1 直接翻译为如下过程: (define (expt b n) (if (= n 0) 1 (* b (expt b (- n 1)))))这原创 2014-06-30 16:48:25 · 682 阅读 · 0 评论 -
计算斐波纳契数,分析算法复杂度
问题描述:Fibonacci数(Fibonacci Number)的定义是:F(n) = F(n - 1) + F(n - 2),并且F(0) = 0,F(1) = 1。对于任意指定的整数n(n ≥ 0),计算F(n)的精确值,并分析算法的时间、空间复杂度。 假设系统中已经提供任意精度长整数的运算,可以直接使用。 这其实是个老生常谈的问题了,不过可能在复杂度分析的时候,很多人忽略了转载 2014-06-30 21:12:58 · 2754 阅读 · 0 评论 -
SICP-练习2.17
【问题】 请定义出过程last-pair,它返回只包含给定(非空)表里最后一个元素的表: (last-pair (list 23 72 149 34)) (34) 【分析】 last-pair需要处理一下三种情况: 空表:引发一个错误单个元素的表:返回这个表本身多于一个元素的表:继续向列表右边前进 以下是last-pair的定义:(迭代实现) 【代码】 (define原创 2014-07-22 19:32:57 · 655 阅读 · 0 评论 -
SICP-练习2.34
【练习2.34】 对于x的某个给定值,求出一个多项式在x的值,也可以形式化为一种累积。假定需要求下面多项式的值: an*x^n + an-1*x^n-1 + .... + a1*x + a0 采用著名的Horner规则,可以构造出下面的计算: (...(an*x + an-1)*x + ... + a1)*x + a0 换句话说, 我们可以从an开始,乘以x,再加上an-1,乘以x,如此原创 2014-07-23 10:33:32 · 742 阅读 · 0 评论