SICP 1.19

解:这道题很有意思,结论是斐波那契数也可以用对数时间复杂度获得。

通过Tpq(Tpq)=TPQ建立方程,解得:

P=pp+qq

Q=qq+2pq

程序如下:

(define (fib n)
  (define (even? n)
    (= (remainder n 2) 0))
  (define (fib-iter a b p q count)
    (cond ((= count 0) b)
          ((even? count) (fib-iter a
                                   b
                                   (+ (* p p) (* q q))
                                   (+ (* q q) (* 2 p q))
                                   (/ count 2)))
          (else (fib-iter (+ (* b q) (* a q) (* a p))
                          (+ (* b p) (* a q))
                          p
                          q
                          (- count 1)))))
  (fib-iter 1 0 0 1 n))

SICP 1.19,布布扣,bubuko.com

时间: 2024-09-30 06:48:10

SICP 1.19的相关文章

SICP 习题 (2.19) 解题总结:重写零钱兑换程序

SICP 习题2.19 要求我们重新设计1.2.2节的零钱兑换程序,要求我们可以轻易改变程序里用的兑换币种. 我们先看看1.2.2节的零钱兑换程序,代码是这样的: (define (RMB-Change amount) (format #t "Changing ~S~%" amount) (cond ((= amount 0) 0) ((< amount 0) 0) (else (RMB-Change-Recursive amount 1 '() )))) (define (RM

【SICP练习】6 练习1.16-1.19

练习1.16 这道题题目特别长,说的无非就是要用一个不变量记录中间结果,然后写出对数步数内的通过迭代来计算幂的函数,当然了还要用到题目中括号内的那个关系.下面就直接上代码了: (define (fast-expt b n) (fast-expt-iter 1 b n)) (define (fast-expt-iter a b n) (cond ((= n 0) a) ((even? n) (fast-expt-iter a (square b) (/ n 2))) ((odd? n) (fast

【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.17-1.19

1.16 1 -------------> 不考虑0的情况 <------------ 2 (define (fe b n) 3 4 (define (fet m c) 5 (cond ((= m n) c) 6 ((>= (- n m) 2) (fet (+ m 2) (* c b b))) 7 (else (fet (+ m 1) (* c b))))) 8 9 (fet 0 1)) 1.17 1 (define (double x) 2 (define (db cur app) 3

SICP 习题1.16-1.19体会

首先反思一下, 昨天做1.14的时候犯了一个严重错误,思维定式了,导致花了很多无用功. 1.14的关键是要想到2个物理意义. 一个是广度优先, 也就是只考虑问题递归树的第一层子数.那么必然有公式 F(n,m) = F(n- c1, m) + ... + F(n-cm, m) + 1   c1..cm为货币价值, m为货币树. 利用这个公式,我们很容易用数学归纳法证明存在一个参数C1,满足F(n,m) > C1 * n的m次方. 但是,利用这个公式,我们是无法证明存在一个参数C2,满足F(n,m)

[SICP Notes] 1.1 The Elements of Programming

About the Book To know more about programming, I have decided to start reading the famous Structure and Interpretation of Computer Programs (SICP, or the Wizard Book), which is first published by MIT in 1985. The Wizard Book used MIT Scheme, which is

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

Install Adobe Flash Player 11.2 on CentOS/RHEL 7/6/5, Fedora 20/19

Adobe Flash Player are very useful for watching videos in web browser online. Without flash player most of the videos will not play in your browser. This article will help you to install Adobe flash player plugin for your browsers in CentOS 6/5, Redh

Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8

读书笔记:<Linux内核设计与实现>,原书第3版,陈莉君 康华 译 第2章:从内核出发     2.3节:编译内核 实验: ============================================================ 系统环境:VM虚拟机 Ubuntu 14.04.3 LTS server版 任务:编译安装新的内核 注意:不要跨大版本,我在3.19版本内 耗时:2小时 所有版本的内核: https://www.kernel.org/pub/linux/kernel