算法学习之一篇文章带你通透递归

前言: 从去年开始,我也慢慢刷起了力扣,开始了我系统性的算法学习。从真正开始学习之后,我才明白为什么大厂都要面算法了。算法里的逻辑思维能力真的体现的淋漓尽致,我个人觉得,如果算法这块过关,什么知识点,什么新技术,在面试官眼里你都能尽快吃透。毕竟思维逻辑和学习能力摆在这。

在我刷题的时候,遇到了动态规划类的题目。看题解也是似懂非懂,摸不着头脑。所以打算从最开始的基础着手。弄懂动态规划类的算法。也是本文出现的原因,作者也看到一篇优秀的文章,所以也想急切的分享下。

下面根据这个经典青蛙跳的算法问题进行讲解; 问:一只青蛙有两种弹跳方式,一次跳一格台阶,一次跳两格台阶。请问有n级台阶时,青蛙一共有多少种跳法

步骤一: 定义一个函数明确函数要实现什么功能

//算出N级台阶,青蛙一共有多少种跳法
public int frogJumps(int n){
    
}

返回值int,返回青蛙有多少种跳法。参数传入台阶数n


步骤二:寻找递归结束条件

因为是递归,当然要找到结束条件跳出循环。此时台阶数n为多少时,会跳出循环。n=1,只有1格台阶时,只有1种跳法。n=2的时候,也只有2种跳法。所以:

//注意,这里只是找出跳出循环的条件,甚至你可以在里面继续写上if语句,n=3时return多少等等
public int frogJumps(int n){
    if (n<=2){
        return n;
    }
}

步骤三:找出函数的等价关系。

这里用我们读书时代的的方程式表达就是f(n) 可以用什么表示。让我们来梳理下

  • 总共有n级台阶。一共有f(n)种方法
  • 青蛙先跳出1级,还有f(n-1)种跳法
  • 青蛙先跳出2级,还有f(n-2)种跳法

其实条件2和条件3就已经概括出了n级台阶的f(n)种跳法了。即:f(n) = f(n-1) + f(n-2);所以青蛙跳的算法出来了:

//算出N级台阶,青蛙一共有多少种跳法
public int frogJumps(int n){
    if (n<=2){
        return n;
    }
    return frogJumps(n-1)+frogJumps(n-2);
}

参考文献

向作者,致敬。为什么你学不会递归?告别递归,谈谈我的一些经验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值