递归拆解三步骤

算法思路

“递归”一词顾名思义就是一个方法在不断的调用自己,没错,但这只是对递归最表层的理解。

那么递归的实质是什么?

递归的本质是在能够把一个大问题不断的拆解成比他小点的问题,然后,当我们拿到最核心的小问题解,就可以利用小问题的解去不断的解决大问题的解。

那小问题的解该如何去得到?

用再小一号的问题去解构出来,小到不能再小的时候就是我们最核心、最基础的零号问题。

通过以上的这些发问,我们不难总结出递归算法的三步骤:

核心、基础问题:就是递归的终点,走到最小的那个问题,能够直接给出结果,不必再往下走的终点答案,

拆解:把每一层的问题都要拆解的比上一层的小,不断缩小问题的大小,才能找到最核心的递归终点问题。

组合:得到小问题解之后,还要知道如何才能根据它去不断的构造和挑战大问题的解。

所以,但我们拿到递归算法题时,我们可以按照三步骤来进行分析,把这三个问题搞清楚之后,代码很容易能够写出来了。

经典案例

斐波那契数列

题目描述

斐波那契数列是一位意大利的数学家,他闲着没事去研究兔子繁殖的过程,研究着就发现,可以写成这么一个序列:1,1,2,3,5,8,13,21… 也就是每个数等于它前两个数之和。那么给你第 n 个数,问 F(n) 是多少。

解析

用数学公式表示很简单:

f(n)=f(n-1)+f(n-2)

代码也很简单,用我们刚总结的三步:

最核心、最基础的Case:f(0)=0,f(1)=1;

分解:f(n-1),f(n-2)

组合:f(n)=f(n-1)+f(n-2)

那么写出代码来就是:

class Solution {
    public int fib(int N) {
        if (N == 0) {
            return 0;
        } else if (N == 1) {
            return 1;
        }
        return fib(N-1) + fib(N-2);
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值