青蛙跳台阶问题——三种方法教会你(适合入门小白)

背景

话说有一只青蛙厌倦了坐井观天的生活,于是它就内卷,每天偷偷读书。

书是人类进步的阶梯——高尔斯蛙

就这样,他顺着台阶一步步往上跳。

突然他产生了疑惑:我一次可以爬一层阶梯,一次也可以跳两层阶梯,那我到了n层阶梯有几种方法。

这就是青蛙跳台阶问题,是经典的面试题之一,请你转动你聪明的大脑思考一下吧。

如果你不会,也没关系,就让我这该死的好人来教你。

三种方法,分别是:递归,迭代,数学公式法

一.递归

递归是什么(C语言)

  1. 举个栗子:F(n)为函数,F(n)=F(n-1)+F(n-2)

  1. 特点:自己调用自己,层层递进,殊途同归

  1. 关键:找规律

  1. 缺点:时间换空间,效率低,不信你试试n=50

  1. 需要限制条件,并且运行过程需要逐步靠近限制条件

怎么寻求规律?

思路一:列表格看一看(计算)

从中可以发现:第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层,这样层层往前倒推,在将抵达各层的方法数累计相加

  1. 举个栗子:抵达第5层的方法数=抵达第4层的方法数+抵达第3层的方法数;

抵达第4层的方法数=抵达第3层的方法数+抵达第2层的方法数;

抵达第3层的方法数=抵达第2层的方法数+抵达第1层的方法数;

那么我们同样可以得出:第n层方法数等于第n-1层方法数和第n-2层方法数之和(n>2)

函数部分代码如图:

二.迭代

什么是迭代

  1. 形象一点说:站在先人的肩膀上

  1. 特点:同人不同代,同个参数不同值

  1. 优点:效率高,空间换时间

有点抽象是吧,没关系,看代码就懂了

三.数学公式法

利用特征根法求公式,对数学功底要求高

注意:

  1. 要引用#include<math.h>

  1. sqrt()表示平方根;pow(a,n)表示a的n次方

  1. 涉及浮点数需要使用double,由于返回值是整型才用int

主函数(与前两个关联,第三个数学公式法已有主函数)

总结、

三种方法,各有优缺

如果有缺漏笔误,还请指正

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值