递归算法讲解

        上课老师讲到递归,发现自己有些遗忘,或者就是根本不会,只是对这个名字熟悉罢了,我就开始搜集资料进行恶补。

        以下是自己对递归的理解,仅是个人理解,若有错误,还请批评指正。

首先我们要明白什么是递归?

递归无非就是自己调用自己,可能对小白来说比较抽象(我也是小白),可以简单理解为套娃?无限套娃?

其实理解这个问题是比较简单的,我们只需要三步走就行

1、明确函数的作用

2、寻找递归结束的条件

3、找出函数的等价关系

我们直接上题目来给大家解释:

对于递归,阶乘是经典题目之一,现在我们就来按照三步走的方法来解题

第一步:明确函数的作用

// 算 n 的阶乘(假设n不为0)
int f(int n){
    
}

第二步:寻找递归结束的条件

对于阶乘我们在纸上算起来大家还是很明白的,

若n等于1,n的阶乘等于1;

若n等于2,n的阶乘等于2;

所以我们就找到了递归结束的条件;

如果(n==1),返回1。

// 算 n 的阶乘(假设n不为0)
int f(int n){
    if(n == 1){
        return 1;
    }
}

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

第三步也是递归当中最难理解的一步,需要好好理解。

例如我们要求5!,其实5!=5*4!。这样看起来也就比较好理解了,也就找到了函数的等价关系,因为我们知道,

4!不就是f(4)嘛,然后函数调用,4的阶乘不就等于4*3!嘛,然后套娃开始,调用调用,当然我们就要找到结束的条件,实际上这在第二步我们就写出来了,当n=1时,返回值1,这样一来一个求阶乘的递归函数就写好了。

// 算 n 的阶乘(假设n不为0)
int f(int n){
    if(n <= 2){
        return n;
    }
    // 把 f(n) 的等价操作写进去
    return f(n-1) * n;
}

接下来我们来一道青蛙跳台阶,也是一道比较基础的经典题目。

分析这道题其实也不难,我们还是按照三步走的方法来手把手教大家解题:

第一步:明确函数的作用

        这道题是要求跳上n个台阶有多少种跳法,定义一个函数就行。

        看懂题目定义函数是第一步

第二步:寻找递归结束的条件

        我们来想,青蛙上一个台阶有几种跳法?答案是一种,就是上一个台阶这一种方法,那我们也就找到了递归结束的条件代码如下:

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

        假设青蛙在第n个台阶上,那么它是从哪里跳上来的呢?

        可能是第(n-1)个台阶跳上一步,

        也可能是第(n-2)个台阶跳上两步。

        话不多说,上代码:

class Solution {
public:
    int jumpFloor(int number) {
        if(number<=1) return 1;
        return jumpFloor(number-1)+jumpFloor(number-2);
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战士小小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值