明明白白学递归
- 递归过程什么样?
- 什么情况用递归
- 递归应该怎么编
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)
④最后返回结果(实例代码)
⑤改进
- 摩尔斯电码解码
然后依次返回。参考代码