递归拆解三步骤

    技术2022-07-11  91

    算法思路

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

    那么递归的实质是什么?

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

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

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

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

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

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

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

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

    经典案例

    斐波那契数列

    题目描述

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

    解析

    用数学公式表示很简单:

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

    最核心、最基础的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); } }

     

    Processed: 0.008, SQL: 9