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

sicp每日一题[1.38]

Exercise 1.38

In 1737, the Swiss mathematician Leonhard Euler published a memoir D e F r a c t i o n i b u s C o n t i n u i s De\ Fractionibus\ Continuis De Fractionibus Continuis, which included a continued fraction expansion for e − 2 e − 2 e2, where e e e is the base of the natural logarithms. In this fraction, the N i N_i Ni are all 1, and the D i D_i Di are successively 1, 2, 1, 1, 4, 1, 1, 6, 1, 1, 8, . . … Write a program that uses your cont-frac procedure from Exercise 1.37 to approximate e e e, based on Euler’s expansion.

这道题本来很简单,只要实现 D i D_i Di就可以了,但是当我使用 1.37 的程序时,却发现算出的结果跟 e e e 有很大差距,最后把 1.37 的程序也做了修改才得到满意的近似值。
首先是去掉了寻找满足条件的最小 k k k值的部分,另外迭代和递归实现也都做了一定的调整。

; 注意 n 和 d 都是 procedure 而不是数字,k 表示要计算的项数
(define (cont-frac n d k); iterative implementation(define (frac-iter k pre)(if (= k 0)pre(frac-iter (- k 1) (/ (n k) (+ (d k) pre))))); recurative implementation(define (frac-recur i)(if (= i k)(/ (n i) (d i))(/ (n i) (+ (d i) (frac-recur (+ i 1))))))(frac-iter k 0));(frac-recur 1))(define (e-euler k)(+ 2.0 (cont-frac (lambda (i) 1); 观察 Di 序列,发现每 3 个一组,; 从 1 开始计数的话,在每一组的 3 个数中,只有除以 3 余数为 2 的那个不是 1(lambda (i) (if (= (remainder i 3) 2) (/ (+ i 1) 1.5)          ; 先除3向下取整再加1最后乘2,等同于先加1再除1.51)) k))) ; e 的近似值为 2.71828
(e-euler 100); 输出结果为
2.7182818284590455

http://www.mrgr.cn/news/16429.html

相关文章:

  • 【CSP:202104-2】邻域均值(Java)
  • 【Python系列】SQLAlchemy 基本介绍
  • SPR系列单点激光雷达测距传感器|模组之CAN-OPEN软件调试说明
  • ​字​节​一​面​
  • Vue.js入门系列(十九):深入理解和应用组件自定义事件
  • [ABC133A] T or T
  • 23. 如何使用Collections.synchronizedList()方法来创建线程安全的集合?有哪些注意事项?
  • 设计模式之外观模式
  • 今日(2024年8月30日)科技新闻(本周)
  • 【Rust】——高级类型
  • win10多个wifi快速切换脚本
  • 15年让爱轮回
  • 黑神话悟空-提高画质、防卡顿、修复等各种功能、各种CT表、各种存档、武器包、人物、装备替换等185+MOD合集
  • “添加”业务功能开发
  • 通过python 操作mysql 脚本
  • “品牌VS套路:华为、格行、中兴随身WiFi谁才是真良心?“
  • VMware中CentOS虚拟机配置网络(Net模式)
  • git commit添加emoji表情
  • 从零开始自学Python-之-常用库篇(十四)python的异步编程库asyncio
  • Tampermonkey 安装