递归的思想通俗的理解就是,函数调用它本身,当满足某个条件后再将调用过程中的函数逐个输出。
递归函数相较于一半函数,其优点就是短小简洁,递归函数通常情况下可以较为简单的实现某种功能,但递归函数也有其缺点,就是递归函数通常计算量较大(一般是因为递归函数容易出现计算重复的问题),因此使用递归函数要视情况而定。
下面就用一个简单的函数来说明什么是递归。
实现:将参数字符串中的字符反向排列。
对于reverse_string函数我们可以用一个较为形象的图来解释一下其运作过程。
1。当*(++string)!='\0'时。
reverse_string(c)
reverse_string(n)
reverse_string(c)
reverse_string( )
..................
reverse_string(?)
2。当*(++string)!='\0不满足后,将最后一次不满足条件的调用输出,并返回到上一层调用再次输出
printf: reverse_string(?)
printf: ..................
printf: reverse_string( )
printf: reverse_string(c)
printf: reverse_string(n)
printf: reverse_string(c)
整个递归的过程可以想象成一个对称的沙漏
下面再补充几个简单的小例子
PS:有错误的地方欢迎大家指出