SICP 1.13

解:

中文

原版

麻蛋的垃圾中文翻译,艹

先证明提示中的:

Fib(0)成立,Fib(1)成立,Fib(2)成立,假设Fib(n)成立,则(那两个拉丁字母用x y分别代替):

x=(1+sqrt(5))/2, y=(1-sqrt(5))/2

Fib(n+1)=Fib(n)+Fib(n-1)=...=((x+1)*pow(x,n-1)-(y+1)*pow(y,n-1))/sqrt(5)

因为x+1=pow(x,2), y+1=pow(y,2)

所以Fib(n+1)=(pow(x,n+1)-pow(y,n+1))/sqrt(5)

所以有Fib(n)=(pow(x,n)-pow(y,n))/sqrt(5)成立

再证明题目中的:

Fib(n)-pow(x,n)/sqrt(5)=(pow(x,n)-pow(y,n))/sqrt(5)-pow(x,n)/sqrt(5)=-pow(y,n)/sqrt(5)

当n为奇数时,Fib(n)>pow(x,n)/sqrt(5),于是

(pow(x,n)/sqrt(5)-(Fib(n)-1)) - (Fib(n)-pow(x,n)/sqrt(5)) >0

同理,当n为偶数时,Fib(n)<pow(x,n)/sqrt(5),于是

((Fib(n)+1)-pow(x,n)/sqrt(5)) - (pow(x,n)/sqrt(5)-Fib(n)) > 0

所以Fib(n)是最接近pow(x,n)/sqrt(5)的整数。

SICP 1.13

时间: 2024-11-13 11:11:30

SICP 1.13的相关文章

python 各模块

01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支持模块 12 _ _builtin_ _ 模块 121 使用元组或字典中的参数调用函数 1211 Example 1-1 使用 apply 函数 1212 Example 1-2 使用 apply 函数传递关键字参数 1213 Example 1-3 使用 apply 函数调用基类的构造函数 122

转:Python标准库(非常经典的各种模块介绍)

Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我们 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块

SICP 习题 (2.13)解题总结:区间计算误差

SICP 习题 2.13 又像是一道数学证明题,和编程关系不大,不过这不能阻挡我们去完成它. 题目要求我们证明,当误差百分比很小的时候,可以使用一个简单的公式,根据被乘区间的误差去计算乘积的误差. 同时,为了简化问题,题目允许我们只计算所有数为正的情况,因为涉及到负数时,乘积的正负变化比较多样,不容易统一处理. 我看到题目后最直接的反应不是去证明它,而是通过程序去找到这个简单的公式,典型的程序员心理. 要做到这一点比较容易,我们构建一些误差百分比比较小的区间,将他们相乘,然后看看乘积的误差有什么

【SICP练习】13 练习1.19

 练习1.19 题目中说道斐波那契数中将变换T的n次方应用于对偶(1,0)而产生出来,而现在将T看作T(pq)中p=0和q=1的特俗情况.因此对于对偶(a,b)来说,a-bq+a(p+q),b-bp+aq.而对于T(pq)的平方也就是(T(pq))^2,就像之前的a中往b乘以q和往a乘以(p+q),现在依旧是相当于a中往bp+aq乘以q(bp+aq为上一次迭代中的"b"),往(bq+a(p+q))中乘以(p+q),同样的变换也发生在b中.依次对于T(pq)的平方来说,a-b(2pq

SICP 1.11-1.13

1.11 递归版本 1 (define (f n) (cond ((< n 3) n) 2 (else (+ (f (- n 1)) 3 (* (f (- n 2)) 2) 4 (* (f (- n 3)) 2))))) 5 6 迭代版本 7 8 (define (f n) 9 (if (< n 3) 10 3 11 (xf n 1 2 3 3))) 12 13 14 (define (xf n a b c d) 15 (cond ((= n d) (max a b c)) 16 (else

C开发者眼中的SICP学习

谈谈自己看SICP的一些体会 第一章  构造过程抽象 这一章其实和C语言完全等价, 不打算深入学习LISP的完全可以快速略过. 基本上没有什么大的价值. 这一章最核心的价值就是下面3句话, 理解了这一章就算看完了. 语言的原型系统 ·如何组合 ·如何提供高层抽象 这3句话是所有语言的核心. 基本上适用所有人. 为什么有人3天学会Java, 有人3年. 关键就在你是否深入理解语言的这3点. 学习任何语言都是直接奔这个主题.所以,有些查字典的完全可以跳过.任何语言, 3天足够入门了. 后面的递归和迭

SICP 找零钱问题背后的思考

问题见SICP P26 此问题的递归方法很简单,类似于背包的思想. 即金额为amount的现金换成n种硬币的种类数 满足循环不变式: count_change(amount,n)=count_change(amount,n-1)+count_change(amount-amount_of_first_coin,n) 递归中止条件是:当a=0,结果为1 a<0,结果为0 当n=0 结果也为0 将上述规则转换为scheme代码,在Drracket中运行 1 #lang racket 2 (defin

13.Linux键盘按键驱动 (详解)

版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介绍以下几个结构体使用和函数,下面代码中会用到 1)input_dev驱动设备结构体中常用成员如下: struct input_dev { void *private; const char *name; //设备名字 const char *ph

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地