SICP习题1.13要求证明Fib(n)是最接近φn/√5 的整数,其中φ=(1+√5)/2 。题目还有一个提示,提示解题者利用归纳法和斐波那契数的定义证明Fib(n)=(φn - ψn) / √5 。

说实话,面对这道题我是完败,完全没有思路那种。更加令人恼火的是,我根本不明白题目中所谓的提示是什么意思。那感觉就好像某个土豪朋友对你说,几千万的项目太难的话就先投资个几百万就好了,而你手上只有几百块一样。

不过,也不能全怪我吧,多少和出题目的作者有关系,在讲计算机程序的书里跑出一道纯数学题有点过分了吧!太不把我们这些没有数学天分的程序员当程序员看了!

然后我好长时间没去做这道题,后来有一天手贱翻了翻《算法导论》,才突然发现SICP相比之下是如此平易近人,于是才回过头将就看了一遍这道题的解法。

首先,Fib(n)=Fib(n-1)+Fib(n-2)这种是递推式,按这种方式去计算的话计算Fib(n)需要计算n次,为了简化计算过程,我们需要找一种方法可以一次性根据n计算Fib(n)的方法,这种方法使用的公式叫一个数列的“通项公式”。

当我去百度查到“通项公式”的时候,我似乎回想起来一点点,高中应该是接触过这个概念的。

后面解题过程就变成了求斐波那契数列的通项公式,有关这一点百度百科里有详细说明,包括斐波那契数列通项公式的证明,使用什么等比数列法之类的。就不用我转载了。

总之,我硬着头皮将整个证明过程看了一遍,看的时候好像明白了,一合眼又好像什么都不记得了。

后来,后来就没有后来了,因为我实在没有时间在这里消耗了,如果以后有时间再仔细研究。最近越发觉得应该补一补数学了,刚入手同济大学的《高等数学》,还没来得及看,工作实在太忙。

好消息是如果你像我一样也跳过这道题的话,似乎对解答后面的题影响不大。

SICP 习题 (1.13) 解题总结的更多相关文章

  1. SICP 习题 (1.7) 解题总结

    SICP 习题 1.7 是对正文1.1.7节中的牛顿法求平方根的改进,改进部分是good-enough?过程. 原来的good-enough?是判断x和guess平方的差值是否小于0.001,这个过程 ...

  2. SICP 习题 (1.14)解题总结

    SICP 习题 1.14要求计算出过程count-change的增长阶.count-change是书中1.2.2节讲解的用于计算零钱找换方案的过程. 要解答习题1.14,首先你需要理解count-ch ...

  3. SICP 习题 (1.8) 解题总结

    SICP 习题1.8需要我们做的是按照牛顿法求平方根的方法做一个求立方根的过程. 所以说书中讲牛顿法求平方根的内容还是要好好理解,不然后面这几道题做起来就比较困难. 反过来,如果理解了牛顿法求平方根的 ...

  4. SICP 习题 (1.9) 解题总结

    SICP 习题 1.9 开始针对“迭代计算过程”和“递归计算过程”,有关迭代计算过程和递归计算过程的内容在书中的1.2.1节有详细讨论,要完成习题1.9,必须完全吃透1.2.1节的内容,不然的话,即使 ...

  5. SICP 习题 (1.10)解题总结

    SICP 习题 1.10 讲的是一个叫“Akermann函数”的东西,去百度查可以查到对应的中文翻译,叫“阿克曼函数”. 就像前面的解题总结中提到的,我是一个数学恐惧者,看着稍微复杂一点的什么函数我就 ...

  6. SICP 习题 (1.41)解题总结

    SICP 习题1.41 看似和周边的题目没有关系,突然叫我们去定义一个叫double的过程,事实上这道题的核心还是高阶函数. 题目要求我们定义一个过程double,它以一个过程作为參数,这个作为參数的 ...

  7. SICP 习题 (2.10)解题总结: 区间除法中除于零的问题

    SICP 习题 2.10 要求我们处理区间除法运算中除于零的问题. 题中讲到一个专业程序猿Ben Bitdiddle看了Alyssa的工作后提出了除于零的问题,大家留意一下这个叫Ben的人,后面会不断 ...

  8. SICP 习题 (2.7) 解题总结 : 定义区间数据结构

    SICP 习题 2.7 開始属于扩展练习,能够考虑不做,对后面的学习没什么影响.只是,假设上面的使用过程表示序对,还有丘奇计数你都能够理解的话,完毕这些扩展练习事实上没什么问题. 习题2.7是要求我们 ...

  9. SICP 习题 (2.6) 解题总结:丘奇计数

    SICP 习题 2.6 讲的是丘奇计数,是习题2.4 和 2.5的延续. 这里大师们想提醒我们思考的是"数"究竟是什么,在计算机系统里能够怎样实现"数".准备好 ...

随机推荐

  1. android入门——BroadCast(1)

    使用广播要定义一个广播接收类,如 package com.example.wkp.broadcast; import android.content.BroadcastReceiver; import ...

  2. Node.js(转) -- 临时来说还看不懂!

    转自:http://blog.jobbole.com/53736/ 本文由 伯乐在线 - Lellansin 翻译.未经许可,禁止转载!英文出处:toptal.欢迎加入翻译组. 介绍 JavaScri ...

  3. JavaScript的一点简介(注:本文诸多观点源于JavaScript高级程序设计,如有侵权,立即删除)

    JavaScript是一门最易让人误解的语言,该语言中精华与糟粕并存(可能比一般语言的这个比例要大一些):但“千淘万漉虽辛苦,吹尽黄沙始到金”,层层面纱下是易用灵活.优雅轻灵的内在.很久以前,Java ...

  4. nginx 几个参数

    worker_processes : When set to 'auto', which is also the default behavior, Tengine will create the s ...

  5. leetcode Invert Binary Tree python

    # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = ...

  6. Linux学习之修改主机名

    1.临时修改主机名 显示主机名: oracle@localhost:~$ hostname localhost 修改主机名: oracle@localhost:~$ sudo hostname orc ...

  7. CircleImageView 圆形图片头像实现

    package com.view.drop; import android.content.Context; import android.content.res.TypedArray; import ...

  8. OpenCV学习 2:播放AVI视频

    原创文章,欢迎转载,转载请注明出处 第二个程序,播放视频.用opencv做起来是如此的简单..哈哈.           学Opencv,只是为了在它的基础上实现工程应用,而它里面高深的理论我等屌丝只 ...

  9. SQL Server 一些重要视图4

    sys.master_files 为每一个数据库的每一个文件返回行.

  10. EPiServer网文

    ListItemCollection Rending: http://joelabrahamsson.com/episerver-7-and-mvc-how-to-customize-renderin ...