在电影《少年班》中周知庸老师刚遇到王大法的时候,周问了王这么一个问题:

设一共有20级楼梯,每次能下1级或2级,问共有多少种下法?

王大法很快算出了有10946种。

其实这个数字也不难得出,设下n级楼梯时有F(n)种下法,那么n=1时有1种下法,n=2时有2种下法(连下两个一级或直接下两级),n>=3时有F(n-1)+F(n-2)种下法。所以F(1)=1,F(2)=2,F(3)=F(2)+F(1),F(4)=F(3)+F(2),F(5)=F(4)+F(3),…… 最后F(20)=F(19)+F(18)

这个递归形式的计算方法和斐波那契数列(OEIS:A000045)是一样的,只不过初始值不一样。

斐波那契数列的递归规律:

(图1)

这是我们要计算内容的递归规律:

(图2)

用代码实现这个递归也很方便,如下面的VB.net函数:

Public Function Func(x As Integer) As IntegerIf x < 0 ThenReturn 0ElseIf x = 1 ThenReturn 1ElseIf x = 2 ThenReturn 2ElseReturn Func(x - 1) + Func(x - 2)End If
End Function

使用此函数对前20级楼梯的计算结果为:

F(20)=10946,电影中王大法给出的结果与之一致。

下面我们更深入地研究一下这个问题:找出这个数列的通项公式。 Richard A. Brualdi 所著的《组合数学》第5版(冯速等译)一书第7章《递推关系和生成函数》给出了寻找斐波那契数列生成函数的方法,我们完全可以照猫画虎,写出本题中数列的通项公式,计算步骤如下:

∵n>=3时,有 F(n)=F(n-1)-F(n-2)

∴n>=3时,F(n)-F(n-1)-F(n-2)=0

令F(n)=q^n,则有

(图3)

(图4)

因为q不为0,所以只需要解出方程q^2-q-1=0即可:

(图5)

q1和q2都是我们所求数列的解,我们所求数列的通项公式可以写成下面的形式:

(图6)

当n=1和n=2时,我们可以联立两个二元一次方程:

(图7)

(图8)

将c1和c2带入到F(n)中

(图9)

因此可得出通项公式为:

(图10)

为验证此方法的正确性,我写了一段代码进行验证:

Public Function Func2(x As Integer) As DecimalIf x < 0 ThenReturn 0ElseIf x = 1 ThenReturn 1ElseIf x = 2 ThenReturn 2ElseDim result As Decimal = 0Dim sqrt5 As Decimal = Math.Sqrt(5)result = ((5 + sqrt5) / 10) * ((1 + sqrt5) / 2) ^ x + _((5 - sqrt5) / 10) * ((1 - sqrt5) / 2) ^ xReturn Math.Round(result)End If
End Function

运行结果如下,计算得出的结果与上一种递归解法是一样的。

附:本文中所有的数学公式,都是在Wikipedia的编辑器上写的,该编辑器使用TeX语法编辑数学公式,代码如下:

图1: <math>F(n)=\begin{cases}1,n=0\\1,n=1\\F(n-1)+F(n-2),n\ge2\end{cases}</math>

图2: <math>F(n)=\begin{cases}0,n=0\\1,n=1\\2,n=2\\F(n-1)+F(n-2),n\ge3\end{cases}</math>

图3: <math>q^{n}-q^{n-1}-q^{n-2}=0</math>

图4: <math>q^{n-2}\left(q^2-q-1\right)=0</math>

图5: <math>q_1=\frac{1+\sqrt{5}}{2},q_2=\frac{1-\sqrt{5}}{2}</math>

图6: <math>F(n)=c_1\left(\frac{1+\sqrt{5}}{2}\right)^n+c_2\left(\frac{1-\sqrt{5}}{2}\right)^n</math>

图7: <math>\begin{cases}F(1)=\frac{1+\sqrt{5}}{2}c_1+\frac{1-\sqrt{5}}{2}c_2=1\\F(2)=\left(\frac{1+\sqrt{5}}{2}\right)^2c_1+\left(\frac{1-\sqrt{5}}{2}\right)^2c_2=2\end{cases}</math>

图8: <math>c_1=\frac{5+\sqrt{5}}{10},c_2=\frac{5-\sqrt{5}}{10}</math>

图9: <math>F(n)=\frac{5+\sqrt{5}}{10}\left(\frac{1+\sqrt{5}}{2}\right)^n+\frac{5-\sqrt{5}}{10}\left(\frac{1-\sqrt{5}}{2}\right)^n</math>

图10: <math>F(n)=\begin{cases}0,n=0\\1,n=1\\2,n=2\\\frac{5+\sqrt{5}}{10}\left(\frac{1+\sqrt{5}}{2}\right)^n+\frac{5-\sqrt{5}}{10}\left(\frac{1-\sqrt{5}}{2}\right)^n,n\ge3\end{cases}</math>

END

转载于:https://my.oschina.net/Tsybius2014/blog/688865

也来说说电影《少年班》中周知庸问王大法的问题相关推荐

  1. 鸿蒙系统 新闻,鸿蒙系统升级名单曝光,为什么你还没有收到推送?3个原因望周知...

    操作系统是电子设备的灵魂,也是我国科技企业的"软肋".不管是PC时代的Windows系统还是智能手机时代的安卓系统,都是美国企业把持的. <科技日报>评选制约我国工业发 ...

  2. 【计算机网络】周知端口号列表

    端口号 端口号是计算机网路中的一个重要概念,它是一个16bits的数,大小在0~65535之间. 0~1023范围内的端口号称为周知端口号,是受限制的,这是指他们保留给诸如HTTP(80).FTP(2 ...

  3. 启动的时候闪退_APP突然闪退怎么办?学会这五个妙招比换手机实用,看完望周知...

    APP突然闪退怎么办?学会这五个妙招比换手机实用,看完望周知 随着互联网的快速发展,智能手机正在改写我们的生活方式,不论是出门不带钱包带手机,还是智能家居一体化,实际上都离不开手机上安装的APP软件. ...

  4. 总所周知, p站是一个聚集了众多各国优秀艺术家相互交流的网站,Python采集p站数据

    前言 总所周知, p站是日本知名的虚拟社区, 聚集了众多来自日本, 中国, 韩国, 美国等国家的优秀艺术家.他们在p站上相互交流, 分享高清优秀插画, 是一个正经的网站 环境介绍 python 3.8 ...

  5. 信号带e无法连接服务器,手机信号栏突然出现“E”是啥意思?原来是这个问题,望周知...

    原标题:手机信号栏突然出现"E"是啥意思?原来是这个问题,望周知 从我们的手机开始使用4G网络之后,基本上在手机的信号标志栏上都是显示的4G的标志,偶尔的时候会显示H的标志,显示H ...

  6. 4g手机关闭4g信号显示无服务器,手机4G信号栏为什么突然出现“HD”?原来开通了这个业务,望周知...

    手机4G信号栏为什么突然出现"HD"?原来开通了这个业务,望周知 我们平时在使用手机的过程中,对于手机信号栏的那个地方还是比较关注的,特别是在手机网络出现问题的时候,我们就更会关注 ...

  7. 微信又确定全新封号标准!触犯这几条底线将被永久封号,望周知

    微信是我们日常生活中,不可避免都要使用到的工具.生活助手.高频率.长时间的使用,有可能一不小心就被封号了,该怎么办? 下面就来介绍下,微信确定的全新的封号标准,触犯这几条底线将被用久封号,望周知. 一 ...

  8. Mysql 中 “必知” 的单行处理函数

    Mysql 中必知的单行函数 每博一文案 钱钟书就曾感慨道,在我一知半解的几国语言中,没有比中国古语 所谓的素交,更能表现出友谊骨髓,素是一切颜色的基础,同时也是 一切颜色的调和,像白日包含了基色,真 ...

  9. 骑砍服务器文件夹,《骑马与砍杀2:霸主》东亚决斗服已开启,决斗礼仪请周知...

    小编注: 2020年5月9日晚,Taleworlds为东亚地区玩家开放了决斗模式的服务器.联机的老玩家应该对于这个模式很熟悉而且充满期待了,从骑砍2开始的新骑友可能还不太熟悉决斗服的规则,因此Tale ...

最新文章

  1. 详尽 | PyTorch动态图解析
  2. spring整合mybatis(入门级简单教程3)--获取sqlSession对象
  3. volatile 和 sig_atomic_tlinux
  4. linux下Mplayer安装与设置指南(以及如何加载显示中文字幕)
  5. C++的iostream标准库介绍+使用详解(转)
  6. 快准牌电脑发软件_电脑如何下载软件
  7. SAP ui5 xml view parse and control creation point
  8. [逆向][Writeup]ISG2015 flagfinder - .NET程序逆向
  9. Android自定义控件学习(四)------创建一个视图类
  10. python中属于无序序列的有_Python字典和集合属于无序序列。(2.0分)_学小易找答案...
  11. java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException
  12. ACL 2021 | 丁香园知识增强预训练模型
  13. BZOJ1666: [Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
  14. ionic3 创建和启动
  15. 歇后语:有牌不胡偏要杠
  16. unity-shader之混合模式、面剔除、Alpha测试、深度测试、通道遮罩
  17. (修订)来自山区双非本科少年的秋招冒险记
  18. 微信小程序、微信低版本兼容
  19. 京东校园招聘2019.04.13 第一题 01序列拉齐
  20. java递归计算N!

热门文章

  1. Linux之禅道安装
  2. 求数组内子数组最大的和(Maximum Subarray )
  3. GeeM2引擎弹出装备显示框的设置方法
  4. 13万人12306信息泄露 小伙挨个发邮件通知
  5. vue实现九宫格抽奖
  6. 宏观经济学 - 国民收入的决定:收入-支出模型
  7. 【脑洞大开】从哲学角度看人工智能:介绍徐英瑾的《心智、语言和机器》
  8. phpadmin安装到mysql中_PHPAdmin的安装和配置
  9. Matlab LZW编码
  10. 你是外包,麻烦不要偷吃零食。。。网友:...