原标题:难倒无数求职者的青蛙跳台阶问题,看测开大神如何解答-0927
本期技术分享讲师大猫老师
今天我给大家分享一个某团外卖的面试题,青蛙跳台阶。
有一只小青蛙,想要跳到最高的台阶上看风景,由于台阶比较高,小青蛙每次只能跳一阶或两阶,如果台阶一共有N阶,请问小青蛙有多少种跳法?
很多同学遇到这个问题的第一反应是写出前几阶的跳法总数,看一下是否有规律,这个思路是没问题,我们先一起写一下:
四幅图片中每种颜色代表一种跳法,我们可以总结出一个初步规律
我们使用n来表示台阶的阶数,使用f(n)来表示到n阶小青蛙的跳法总数,我们总结的规律为f(n)=f(n-1)+f(n-2)。
好,我们使用猜想现在已经找到了规律,但我们并没有用数学的方法证明我们的表达式的正确性。整个证明过程我这里就不写了,面试时也不会让大家去证明这个表达式,但我们要给面试官讲清楚这个表达式是正确的。我们从表达式入手来分析下这个结论的合理性。
小青蛙想跳到第n阶台阶必须经过n-1和n-2阶台阶(小青蛙每次只能跳一阶或两阶),则问题转化为n阶台阶的跳法总数为n-1和n-2台阶的跳法总数之和,故表达式f(n)=f(n-1)+f(n-2)是非常正确的结论。
这个表达式就是著名的斐波那契数列(关于斐波纳契数列更多内容请参考第一期课程,这里放个第一期课程链接),斐波那契数列的递归解法如下:
deffib(n):
ifisinstance(n,int):
return None
elifn ==1orn ==2:
returnn
else:
returnfib(n-1) + fib(n-2)
当然本题到此考察并未结束,我们都知道递归会带来性能问题,我们可以继续将递归方法转化为非递归实现;除此之外,如果您使用Java或C++实现代码,还需要考虑大整数溢出问题。
接下来我把这道题的评分标准给大家:
1、能写出代码得3分;
2、能讲清原理得3分;
3、能分析性能得2分;
4、能分析溢出得2分;返回搜狐,查看更多
责任编辑: