当前位置: 首页 > news >正文

SICP 习题 (1.15) 解题总结

SICP 习题 1.15要求计算过程Sine的空间和步数增长阶。

有人可能会和我一样,问Sine是什么,呵呵,就是三角函数Sin啦,书中讲到一种求sin函数的方法,要求计算这种方法的增长阶。


先看看Sine过程的定义,书中全写出来了,照抄出来:


(define (cube x) (* x x x))

(define (p x) 
  (- (* 3 x) (* 4 (cube x))))

(define (sine angle)
  (if (not (> (abs angle) 0.1))
      angle
      (p (sine (/ angle 3.0)))))

首先题目问求(sine 12.15)的时候p过程调用了多少次,这个很简单,在过程p里加多几句输出,测试一下就好了,想下面这样:

(define (p x) 
  (display "run !")
  (newline)
  (- (* 3 x) (* 4 (cube x))))


接着的问题才是这道题的根本,就是sine过程的空间和步数增长阶是什么?


要回答问题,我们先要理解这个过程的机制,它其实就是每次都将参数除于3,直到参数足够小为止。


也就是说 0.1 * ( 3 的 x次方)= n ,其中n为要求的角度,x就是我们要求的步数。


于是有x = Log 3 (10n )


就是说步数的增长阶是对数的。

因为是简单的递归调用,所以空间增长阶和步数增长阶是相同的。




相关文章:

  • 编码规范之美.佛语释道
  • 小智慧63
  • 自己写Lucene分词器原理篇——CJKAnalyzer简单讲解
  • 如何建立基于CocoaPods的ReactiveCocoa工程
  • Webservice-XML与Java(五)
  • Java中SimpleDateFormat用法详解
  • Parcelable protocol requires a Parcelable.Creator object called。。。。。
  • MOTOROLA MC40 android系统扫描开发
  • cocos2d-x开启IOS多点触控
  • android友盟注意事项
  • Android编程之Intent源码详解
  • Android编程之LocalBroadcastManager源码详解
  • Android编程之DialogFragment源码详解(一)
  • Android编程之DialogFragment源码详解(二)
  • 在Mac上配置cocos2d-x 3.0,xcode5资源无法刷新的问题
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • echarts花样作死的坑
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • exif信息对照
  • extjs4学习之配置
  • Go 语言编译器的 //go: 详解
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • javascript数组去重/查找/插入/删除
  • JS实现简单的MVC模式开发小游戏
  • leetcode46 Permutation 排列组合
  • Python - 闭包Closure
  • Python爬虫--- 1.3 BS4库的解析器
  • spring security oauth2 password授权模式
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • webpack4 一点通
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 服务器从安装到部署全过程(二)
  • 记一次和乔布斯合作最难忘的经历
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 深度解析利用ES6进行Promise封装总结
  • 详解NodeJs流之一
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 积累各种好的链接
  • ​用户画像从0到100的构建思路
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #传输# #传输数据判断#
  • (02)vite环境变量配置
  • (4)事件处理——(7)简单事件(Simple events)
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转载)从 Java 代码到 Java 堆
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net分布式压力测试工具(Beetle.DT)