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

明明白白学递归

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

1.递归的定义

又译为递回,在数学与计算科学中,是指在函数的定义中使用函数自身的方法。
你一定听得懂的

你一定听得懂的

当进行下一次递归的时候,先前的函数会被挂起,栈的深度会加深。后进先出,栈的结构。
你一定听得懂的

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

2.两条原则

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

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

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

具备以下三个条件
①问题可分解成遵循重复模式的多个过程:每步完成“一点“工作,剩下的交给下一个”自己“,可以利用”下家“返回的结果。
②最后一个“下家”满足一定终止条件,无需再向下交付,“终结”并返回。
③递归深度不能“太深”,防止堆栈溢出。
你一定听得懂的

4.递归应该怎么编

  • 阶乘问题f(n)=n!
    f(n)=n*(n-1)(n-2)1=nf(n-1),n>1
    你一定听得懂的

  • 斐波那契数列
    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)挂起
    你一定听得懂的

②然后依次调用,挂起
你一定听得懂的

③开始依次返回
你一定听得懂的

你一定听得懂的
你一定听得懂的
你一定听得懂的

③解决f(3)
你一定听得懂的

你一定听得懂的

④最后返回结果(实例代码)
你一定听得懂的

⑤改进
你一定听得懂的

  • 摩尔斯电码解码
    你一定听得懂的

你一定听得懂的

你一定听得懂的

然后依次返回。参考代码
你一定听得懂的

5.参考文献

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

你可能感兴趣的:(algorithms)