(七)递归
1.什么是递归
c++的函数可以调用自己(main主函数不允许),这种实现方式被称为递归(也就是自己调用自己,直到到达退出条件)。递归在特定的编程(比如人工智能)中是重要的工具。
2.递归调用的工作流程:
如果函数调用自己,那么调用的函数也会调用自己,这样会无限循环下去,为了能够跳出循环,一般我们在递归调用中设置if语句来进行递归判断,也就是将递归调用放在if语句当中,如果if的判断语句为true,那么会继续调用自己,则在if语句上面的statement1语句都会被执行,而if语句后面的statement2语句不会执行。直到if语句判断为false,那么if后面的语句statement2才会执行,后返回上一层函数,继续执行上一层函数的statement2,最终一步步到达第一个调用的函数中。递归调用每一次都会创建新的变量,虽然同名,但是是不相同的。
3.包含多个递归调用的递归
可以在函数开头就说明调用的跳出方式,比如设置调用层数,或者说是递归层次,当层数到达某个值的时候就跳出调用。跳出可以直接使用return语句:return;这种层次的设置可以使用函数的形参,然后调用自身的时候将形参加1或减1来传递给下一层的调用,这样下一层调用的形参与上一层的形参将会有相同的名称,但是值是差1的,是同名的作用域不同的变量,因此形参会一层层变化,直到到达指定的层数之后便会跳出递归,从而实现一步步返回主函数的功能。
函数的递归调用和普通的函数调用并没有本质的区别,区别只是自己调用自己和需要设置跳出递归的if语句罢了。
包含多个递归调用的时候,调用的次数将会呈现指数增长,因此,如果调用的层数过多,则不适合用递归调用。而如果调用的层数比较少的时候,这种程序将是一种精巧的实现方式。