背景
话说有一只青蛙厌倦了坐井观天的生活,于是它就内卷,每天偷偷读书。
书是人类进步的阶梯——高尔斯蛙
就这样,他顺着台阶一步步往上跳。
突然他产生了疑惑:我一次可以爬一层阶梯,一次也可以跳两层阶梯,那我到了n层阶梯有几种方法。
这就是青蛙跳台阶问题,是经典的面试题之一,请你转动你聪明的大脑思考一下吧。
如果你不会,也没关系,就让我这该死的好人来教你。
三种方法,分别是:递归,迭代,数学公式法
一.递归
递归是什么(C语言)
举个栗子:F(n)为函数,F(n)=F(n-1)+F(n-2)
特点:自己调用自己,层层递进,殊途同归
关键:找规律
缺点:时间换空间,效率低,不信你试试n=50
需要限制条件,并且运行过程需要逐步靠近限制条件
怎么寻求规律?
思路一:列表格看一看(计算)
从中可以发现:第n层方法数等于第n-1层方法数和第n-2层方法数之和(n>2)
思路二:倒推法(不用计算)
n>2时:
抵达第n层前必须抵达第n-1层或第n-2层,抵达第n-1层必须抵达第n-2层或第n-3层,抵达第n-2层必须抵达第n-3层或第n-4层,这样层层往前倒推,在将抵达各层的方法数累计相加
举个栗子:抵达第5层的方法数=抵达第4层的方法数+抵达第3层的方法数;
抵达第4层的方法数=抵达第3层的方法数+抵达第2层的方法数;
抵达第3层的方法数=抵达第2层的方法数+抵达第1层的方法数;
那么我们同样可以得出:第n层方法数等于第n-1层方法数和第n-2层方法数之和(n>2)
函数部分代码如图:
二.迭代
什么是迭代
形象一点说:站在先人的肩膀上
特点:同人不同代,同个参数不同值
优点:效率高,空间换时间
有点抽象是吧,没关系,看代码就懂了
三.数学公式法
利用特征根法求公式,对数学功底要求高
注意:
要引用#include<math.h>
sqrt()表示平方根;pow(a,n)表示a的n次方
涉及浮点数需要使用double,由于返回值是整型才用int
主函数(与前两个关联,第三个数学公式法已有主函数)
总结、
三种方法,各有优缺
如果有缺漏笔误,还请指正