你一定听得懂的"递归"教程!课程笔记

明明白白学递归

  • 递归过程什么样?
  • 什么情况用递归
  • 递归应该怎么编

1.递归的定义

又译为递回,在数学与计算科学中,是指在函数的定义中使用函数自身的方法。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-II4MG1j6-1588082322356)(./1588076724950.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wu9Gcpkt-1588082322363)(./1588077380433.png)]

当进行下一次递归的时候,先前的函数会被挂起,栈的深度会加深。后进先出,栈的结构。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7SDgb6jG-1588082322367)(./1588078012724.png)]

不管递归到哪,最后会执行完毕,回到起点。

2.两条原则

①调用的目的是为了让其返回

  • 返回指的是返回一个结果或者返回一个控制权(执行成功,未必返回结果)
    ②下家不返回,上家无法传递

3.什么问题适合递归解决?

具备以下三个条件
①问题可分解成遵循重复模式的多个过程:每步完成“一点“工作,剩下的交给下一个”自己“,可以利用”下家“返回的结果。
②最后一个“下家”满足一定终止条件,无需再向下交付,“终结”并返回。
③递归深度不能“太深”,防止堆栈溢出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZQFdF7e1-1588082322372)(./1588078464292.png)]

4.递归应该怎么编
  • 阶乘问题f(n)=n!
    f(n)=n*(n-1)(n-2)1=nf(n-1),n>1
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S1SZUrPY-1588082322377)(./1588078772231.png)]

  • 斐波那契数列
    f(0)=1,f(1)=1,f(n)=f(n-1)+f(n-2)
    如f(5)=f(4)+f(3)
    (f(4)和f(3)不是同时调用的,而是分别调用的)
    ①首先调用f(4),将f(5)挂起
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mEi5KXfv-1588082322378)(./1588079260843.png)]

②然后依次调用,挂起
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A5xj3Mbj-1588082322380)(./1588079333519.png)]

③开始依次返回
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③解决f(3)
在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GS14hy3u-1588082322390)(./1588079524976.png)]

④最后返回结果(实例代码)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v92ES7K2-1588082322392)(./1588079570831.png)]

⑤改进
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rUrkrnfq-1588082322394)(./1588080347024.png)]

  • 摩尔斯电码解码
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgCNmrtY-1588082322396)(./1588080741594.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YmA2eq21-1588082322398)(./1588081070346.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dpbUF3GD-1588082322399)(./1588081111274.png)]

然后依次返回。参考代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C0vr3B1b-1588082322401)(./1588081426717.png)]

5.参考文献

【1】参考视频—你一定听得懂的递归教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值