sicp
文章平均质量分 51
学习的路还很长,一步一个脚印。
云声风语
来吧,Functional Programming
展开
-
SICP练习1.17
对题目进行分析, 反复地做加法,能达到乘积的效果, 值得注意的是在书上写了如下代码 (define (* a b) (if (= b 0) 0 (+ a (* a (- b 1))))) 第一眼看的时候可能会糊涂, 可是题干上已经说明, “in which it is assumed that our language can only add,not multiply” 所以,我们不要把*看成乘号, 只需将他看成一过程名即可, 在这个过程中只要形参b不为0, 就会递归出如下过程: (+ a (+ a (+原创 2021-03-21 19:54:51 · 144 阅读 · 0 评论 -
SICP练习1.16
在之前的学习中,我们学习了关于求幂的一系列算法; 比如求幂的递归算法,这个算法的体验和之前学习的阶乘的算法是差不多的; 一、求幂的递归算法实现 利用(expt b n)中n不断减小达到n=0时返回值为1为终止, (if (= n 0) 1 (* b (expt b (- n 1)))) 这样一个过程得到的代换模型如下: (* b (* b (* b (...(* b (- n 1)))))) 此时的n为1, 这里需要理解递归的过程。 二、求幂的迭代算法实现 利用一个计数器counter和一原创 2021-03-20 18:30:53 · 203 阅读 · 0 评论 -
SICP练习题1.14
一、空间增长的阶 因为从(cc 11 5)到(cc 0 1)总共16层(树的深度为16),所以可以看出最大步骤层数(所需空间增长的阶)是:11+5=16(因为(cc 11 x)中的x为(1-5),(cc y 1)的y为(0-11),(cc 11 1)中x和y都用了就算一个步骤层)。可推断出最大步骤层数可能和输入的关系大概为kinds-of-coins + amount 这样一个值,最大步骤层数的增长正比于输入(amount的值越大,kinds-of-coins +amount的值也就越大)。深度为n+5,其原创 2021-03-07 15:04:27 · 287 阅读 · 0 评论