递归函数
前言
递归主要是应对与数学场景吧。
简单来说就是函数 直接或间接的调用了自己,那么这个函数就可以说时递归函数
内联函数不能作为递归函数
1 | void hhh(){ |
正文
接触最早的递归函数应该是阶乘了。
n! = 1 x 2 x 3 x 4 x…(n-1) x n
按照函数的操作,就是传递一个参数,每次乘以这个参数-1,当参数==1的时候就返回参数就行了。
1 | int func(int x){ |
假设x=10
10 x func(9)
9 x func(8)
8 x func(7)
7 x func(6)
6 x func(5)
…
2 x 1 // x==1,return x;所以不进函数了。
递归函数用的时候一定要能结束。。。不然堆栈溢出程序也没法跑
当然你说这种操作用for循环其实还更快,都不用反复入栈了。但递归在可阅读性和逻辑上总归有益处。
要相信能活下来的总归有道理,而且设计一个递归函数难度也不小。
抛开函数调用自己,如果函数反复调用其他函数或者多个函数。
1 | int func0(){ |
函数之间调用进行递归,更需要注意安全。且也要保证能够被解读。不如还不如for循环。
结语
递归更加适用于树形结构的情况。
一个良好的递归函数,我们期望它每一次都更接近答案,并且能够在特定情况下终止处理。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Box'Blog!
评论