没想到引来家长们的热议。
乍一看,很多人以为它与爬楼梯问题一样。所谓爬楼梯问题,长下面这样:
有10级楼梯,每次可以跨1级或2级楼梯,请问从最底下爬到最顶上一共有多少种爬法?
爬楼梯问题的答案是经典的斐波那契数列。具体可以参考我六年前的文章:
但稍微审一下题,就发现两道题并不完全相同。因为最初的题目里有两个特别的要求:
(1)每一步都可以向前或向后走,而在爬楼梯问题里只能往前走;
(2)要求每块垫脚石都要恰好被踩一次,而爬楼梯问题里面没有这个要求。
到底怎么做?
没有思路没关系,从简单的开始嘛!
2块石头,显然只有1种方法;
3块石头,不难验证也只有1种方法;
4块石头,一共有2种方法,具体分析如下:
如果第一步向前走50cm,那剩下的就是3块石头的场景,只有1种方法;
如果第一步向前走1m,那第2步必须回踩,否则就抵达终点了,也只有1种方法。
5块石头,我们仿照4块石头的分析,分为两类:
(1)第一步向前走50cm,此时就面临4块石头的场景(虚线框所示),因此有2种方法;
(2)第一步向前走1m。
此时第2步必须往回踩2号石头。否则如果继续向前,那后面要踩到2号石头只能从4号石头往回走1m实现,但这样到达2号石头后就无法再往前走了(因为3号和4号石头都已经被踩过)。
第2步回踩2号石头后,第3步只能是向前走1m到达4号石头,此时面临的场景与2块石头相同(下图虚线框所示),只有1种方法。
因此,5块石头一共有3种方法。
到这里,大致就应该可以看出整个问题可以用递归思想来解决。
一般化地,对于n(n>4)块石头,我们设方法数为f(n),则类似于5块石头的场景,按照第一步是向前走50cm还是1m来分为两类,第一类有f(n-1)种方法,第二类则有f(n-3)种方法,因此有:
f(n)=f(n-1)+f(n-3) (n>4)
根据一开始的分析,有f(2)=f(3)=1, f(4)=2
据此,可得序列:
1,1,2,3,4,6,9,13,19,28,41,60
因此,13块石头一共有60种过河方法。
解决这个问题的基本思维方式是递归思维。这是我在数学思维课(第一期)花了好多节课重点讲的一种思维方式。
递归思维是数学和计算机领域极为重要的一种思维方式,体现了许多问题所具备的内在结构美。应用递归思维解决问题,最重要的是发现规模更小但结构相同的子问题,从而一步步把大问题转化为更小的问题,直至初始最简单的问题为止。
但问题是,怎么发现问题的递归结构?
从上面的解题过程可见,这绝不是灵光一现,而是从简单开始尝试,然后观察、发现的自然结果。
最后重点提醒:
凡是在今年10月28日至11月28日购买昍爸数学课程,就赠送昍爸签名书(每本书都有赠言并会写上孩子姓名)和数学文创包。数量有限,先到先得。
活动规则:购买n门课程,赠送n本签名书(可自选),并附赠n个数学帆布包。
可供选择的签名书:
(全文完)
作者:昍爸,中国科学院计算机博士,大学教授,博士生导师。主持国家自然科学基金4项,在国内外高水平期刊和会议发表论文60余篇。曾获初中和高中全国数学奥林匹克联赛一等奖,江苏赛区第一名,高考数学满分。著有畅销书《写给孩子的数学之美》、《搞定平面几何:辅助线是怎么想出来的》、《给孩子的数学思维课》与《给孩子的数学解题思维课》。