![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SICP
杰Tang_fighting
这个作者很懒,什么都没留下…
展开
-
SICP-练习2.1
【练习2.1】请定义出make-rat的一个更好的版本,使之可以正确处理整数和负数。当有理数为正时,make-rat应当将其规范化,使它的分子和分母都是正的。如果有理数为负,那么就应只让分子为负。【分析】分子、分母的符号总共有四种情况:1. 分子、分母都为正数,2. 分子为负数,分母为正数。这两种情况下,输入和输出一致。3. 分子、分母都为负数,4. 分子为正数,分原创 2014-07-17 20:42:54 · 622 阅读 · 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 · 1154 阅读 · 1 评论 -
SICP-换零钱方法的统计
【问题】现有半美元、四分之一美元、10美分、5美分和1美分共5种硬币。若将1美元换成零钱,共有多少种不同方式?【思路】采用递归过程,假定我们所考虑的可用硬币类型种类排了某种顺序,于是就有下面的关系:将总数为a的现金换成n中硬币的不同方式的数目等于将现金数a换成除第一种硬币之外的所有其他硬币的不同方式数目,加上将现金数a-d换成所有种类的硬币的不同方式数目,其中的d是第一原创 2014-06-29 22:12:06 · 3033 阅读 · 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 · 679 阅读 · 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 · 2745 阅读 · 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 · 650 阅读 · 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 · 729 阅读 · 0 评论